Spring Boot配置文件讲解
一、Spring Boot支持两种配置文件
1、application.properties文件
2、application.yml文件
二、配置文件可以存放在四个位置
1、为项目创建一个config文件夹,存放在项目的config文件夹下
2、直接存放在项目下
3、在类路径新建一个config文件夹,放置在config文件夹下。
4、直接存放在类路径下
也可以使用spring.config.location去指定配置文件存在的路径
注意:它们之间的优先级由高到低,并且为互补配置。即如果(1)和(2)有相同配置,Spring Boot默认采用(1)。如果(2)有的配置(1)没有
,那么会加载(2)的配置
目录结构如下:
![目录结构](https://img-blog.csdnimg.cn/20200521231643129.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNjc5MDU2,size_16,color_FFFFFF,t_70#pic_center)
三、Properties文件配置来将值注入到JavaBean中
1、在需要注入的JavaBean中使用@PropertySource注解引入配置文件[如果是application.properties,就可以不需要这个注解。]
2、@ConfigurationProperties(prefix = "person")表示去配置文件寻找信息的前缀。用于映射信息到字段中。
@PropertySource(value = {"classpath:test.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private String age;
private boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
/*setter和getter方法省略**/
}
@Component
public class Dog {
private String name;
private Integer age;
/**setter和getter方法省略**/
}
test.properties文件只需要如下配置,就可以将信息注入JavaBean
person.lastName=小王
person.age=20
person.boss=false
person.birth=2020/7/15
#这里是maps
person.maps.k1=v1
person.maps.你是=我是
#这里是设置数组
person.list=0,1,2,3,4
person.dog.name=20
person.dog.age=5
上述可能会存在乱码,注意在idea中将properties文件的编码格式改为UTF-8编码
四、使用YAML文件来将值注入到JavaBean中
1、语法:键和值之前一定要有空格(多少个空格都行,但是一定要有),比如: k1:(空格)v2
2、值的写法:
普通字符串:直接按照key: value字符串来写
value默认是不需要加引号的
但是如果加了双引号,不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
加了单引号,会转移特殊字符,特殊字符会变为一个普通的字符串数据
比如下面例子
实体类为:
@Component
@ConfigurationProperties(prefix = "testCommonString")
public class TestCommonString {
//测试默认字符串
private String defaultString;
//测试带有双引号字符串
private String doubleQuotes;
//测试带有单引号字符串
private String singleQuotes;
/**省略setter和getter方法**/
}
application.yml配置为:
testCommonString:
defaultString: 普通\n\r字符串
doubleQuotes: "双引号\n\r字符串"
singleQuotes: '单引号\n\r字符串'
最终的执行结果为:
defaultString:普通\n\r字符串
doubleQuotes:双引号
字符串
singleQuotes:单引号\n\r字符串
可以看出使用双引号时,特殊字符会表达自己原本的意思【换行】
对象、maps(属性和值):
person:
lastName: name
age: 20
行内写法为:
person: {lastName: name,age: 20}
数组(list、set):
arrays: 【注意:下面的横杠是一定要加的】
- 1
- 2
- 3
行内写法:arrays: [1,2,3]
总结一下:如果想要将值注入JavaBean,就需要使用@ConfigurationProperties标注类【使用Spring的@Value注解也可以,但是不支持复杂对象的封装】。还需要使用@Configuration将类加入到ioc容器中。
如果配置值的properties是非主配置文件的,就需要使用@PropertySource进行文件引入