配置文件
Spring Boot 的配置文件有两种不同的格式,一种是 properties ,另一种是 yaml 。
默认的配置文件名为:application
在idea中创建springboot项目,会自动在项目的resources文件夹下创建一个application.properties配置文件
两种格式只是书写格式不一样,根据自己的需求来选择使用哪种配置文件
格式
properties 的格式:
xxx.xxx=xxx
以逗号来表示递进关系,用等号来表示赋值
例:
server.port=xxx
注意:在 application.properties 配置中文值,读取时可能会出现中文乱码问题。因为 Java .properties 文件默认编码方式是 iso-8859 ,Spring Boot 应用以 UTF-8 的编码方式读取,就导致出现乱码问题。
yaml 的格式:
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来表示层级关系;只要是左对齐的一列数据,都是同一个层级的
例:
server:
port: xxx
yaml 的一些写法
普通的值(数字,字符串)直接写, 字符串不用加引号
k: v
对象、Map(属性和值)(键值对):
person:
name: hi
age: 18
数组(List、Set):
用- 值表示数组中的一个元素
person:
- one
- two
配置文件的位置和优先级
application配置文件可以写在Spring Boot项目四个不同的位置,位置如下:
1、项目根目录下的config目录中
2、项目根目录下
3、classpath下的config目录中
4、classpath目录下
位置如下图所示
四个位置中的application.yaml文件的优先级按照上面列出的顺序依次降低。如果有同一个属性在四个文件中都出现了,以优先级高的为准,即相同名称的配置优先级较高的会覆盖掉优先级较低的内容。
在springboot启动时,会默认从这四个位置中查找配置文件并加载
在项目中,除了application配置文件,一般我们还会配置其他的配置文件,那么如何引入呢?
使用 @PropertySource和@ConfigurationProperties(prefix =xx)即可引入配置文件,并将配置文件中的值注入到该类的属性中
@Component
@PropertySource("classpath:test.properties")
@ConfigurationProperties(prefix = "test")
public class Test{
}
读取配置文件
我们把一些信息写到配置文件后,应该如何读取呢?
创建一个application.yml的配置文件,内容如下
my:
name: xxx
age: 18
you: xxx
1.通过 @value 读取配置文件内的信息,使用@value("${xxx}"),适合于简单单一的信息
@Value("${you}")
String you;
2.通过@ConfigurationProperties读取
@ConfigurationProperties可以读取配置文件中的信息,并将其注入到bean对应的属性中,prefix 表示前缀
例:
//使用@Component之后,
@Component
@ConfigurationProperties(prefix = "my")
class My {
private String name;
private String age;
}
这里再介绍一个注解@EnableConfigurationProperties,它也可以实现配置文件的bean注册功能
@ConfigurationProperties的prefix 为空,@EnableConfigurationProperties({xxx.class})将其注册为Bean时,其名字是:被@ConfigurationProperties注解的类的全类名
@ConfigurationProperties的prefix 不为空,如果使用@EnableConfigurationProperties将其注册为Bean,Bean的名字是
prefix的值 + “-” + 注解类的全类名
@ConfigurationProperties
class You {
private String you;
}
@SpringBootApplication
@EnableConfigurationProperties(You.class)
public class ReadConfigPropertiesApplication {}
3.@PropertySource读取指定 properties 文件
这个上面介绍了
注意:@PropertySource读取的是properties 文件