二,配置文件
Spring Boot 使用一个全局的配置文件
application.properties
application.yml
配置文件放在src/main/resources目录或者类路径/config下
yml是YAML语言的文件,以数据为中心,比json、xml等更适合做配置文件
http://www.uaml.org/参考语法规范 配置文件的作用:修改SpringBoot自动配置的默认值:
SpringBoot在底层帮我们自动配置好
properties:配置实例
server.port=8081YAML:配置实例
server: port: 8081XML:
<server> <port>8081</port> </server>2,YAML语法
1.基本语法
k:空格v: 表示一对键值对(空格必须有):
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一层级的。
属性和值也是大小写敏感:
server: port: 8081 path: /hello2.值的写法
字面量:普通的值(数字,字符串,布尔)
k: v : 字面直接来写;
字符串默认不用加上单引号或者双引号;
"": 不会转义字符串里面的特殊字符;特殊字符会作为本身想表达的意思
name: "zhangsan \n lisi" 输出:zhangsan 换行 lisi
'': 单引号:会转义特殊字符, 特殊字符最终只是一个普通的字符串数据
name: 'zhangsan \n lisi' 输出 :zhangsan \n lisi
对象,Map(属性和值)(键值对):
k: v : 在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends: lastName: zhangsan age: 20行内写法:
friends: {lastName: zhangsan,age: 18}
数组(List、Set):
用- 值表示数组中的一个元素
pets: - cat - dog - pig行内写法
pets: [cat,dog,pig]
3.配置文件注入
application.yml
person: lastName: zhangsan age: 18 boss: false birth: 2017/12/12 maps: {k1: v1, k2: 12} lists: - lisi - zhaoliu dog: name: 小狗 age: 2
Person.java
package com.example.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * @ConfiguraionProperties:告诉Springboot将本类中的所有属性和配置文件中相关的配置进行绑定; * prefix = "person":配置文件中哪个下面的所有属性进行一一映射 * * 只有这个组件是容器中的组件,才能容器提供的@ConfiguratPropertoies功能 */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; @Override public String toString() { return "Person{" + "lastName='" + lastName + '\'' + ", age=" + age + ", boss=" + boss + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Boolean getBoss() { return boss; } public void setBoss(Boolean boss) { this.boss = boss; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Map<String, Object> getMaps() { return maps; } public void setMaps(Map<String, Object> maps) { this.maps = maps; } public List<Object> getLists() { return lists; } public void setLists(List<Object> lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } }
Dog.java
package com.example.bean; public class Dog { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
<!--导入配置文件处理器,配置文件进行绑定就会有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
package example; //SpringBoot02ConfigApplicationTests测试类 import com.example.bean.Person; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.HashMap; /** * SpringBoot单元测试 * 可以在测试期间很方便的自动注入 */ @RunWith(SpringRunner.class) @SpringBootTest public class SpringBoot02ConfigApplicationTests { @Autowired Person person; @Test public void contextLoads(){ System.out.println(person); } }
4. .YAML缺点
YAML文件不能通过@PropertySource注解加载。所以,在这种情况下,如果需要使用@PropertySource注解的方式加载值,
那就要使用Properties文件。
5.使用xml配置
Sping Boot提倡零配置,即无xml配置,但是在实际项目中,可能必须使用xml配置。
@ImportResource({"classpath:some-contetx.xml","classpath:another-context.xml"})6.命令行参数配置
Spring Boot 可以是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行:
java -jar xx.jar
可以通过以下命令修改Tomcat端口号:
java -jar xx.jar --server.port=90907.类型安全的配置(基于properties)
避免多次配置@Value,减少麻烦。通过@ConfiguraionProperties将properties 和一个bean及其属性关联,从而实现类型安全的配置在application.properties上添加配置:
author.name=wyf author.age=32可以新建一个properties文件,这就需要在@ConfiguraionProperties属性locations里添加指定properties的位置,且
需要在入口类上注入配置
类型安全的Bean:
@ConfiguraionProperties(prefix="author") @ConfiguraionProperties(prefix="author",locations= {"classpath:config/author.properties"})关闭特定的自动配置
使用@SpringBootApplication注解的参数
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})