配置文件

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目录下

位置如下图所示

springboot 应用名称 springboot文件命名规范_spring

四个位置中的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 文件