本博客由 [Pipe](https://github.com/b3log/pipe) 强力驱动

SpringBoot 配置文件加载 5 大结论

结论1

@Value + @Profile注解

@Value + @Profile 注解可以动态读取SpringBoot的application配置文件属性值,不能读取自定义配置文件属性值。如果找不到启动时就会报错。

结论2

@Value + @Profile + @PropertySource注解

@Value + @Profile + @PropertySource 注解可以读取@PropertySource注解指定的配置文件属性值,并且可以读取结论1中读取到的属性值,如果找不到就返回null值。

结论3

@PropertySource + @ConfigurationProperties注解

@PropertySource + @ConfigurationProperties注解可以读取@PropertySource注解指定的配置文件属性值,并且结合@ConfigurationProperties注解中定义的属性值前缀将值直接赋值给配置类的对应属性。

注意:@ConfigurationProperties注解前缀 + 配置类的属性名 = @PropertySource注解获取到的属性名,并且大小写敏感,找不到匹配属性就返回null值。

结论4

@Value + @PropertySource + @ConfigurationProperties注解

如果根据结论2能找到值,直接将值赋值给配置类的对应属性,否则,根据@ConfigurationProperties获取配置文件的属性值,找到就返回,如果找不到就返回null值。

结论5

  1. 结论1和结论2中的@Profile注解可以不指定,如果不指定,则只能读取SpringBoot默认配置文件application.properties或application.yml中的属性值。
  2. 配置文件的加载顺序为先加载SpringBoot结合@Profile定义的配置文件,再读取自定义的配置文件,如果多配置文件定义了同一个属性,则SpringBoot会使用第一个读取到的值,后面加载的值不会覆盖前面的值。
  3. 如果application.properties和application.yml在同一目录下存在,则会读取application.properties文件。

PS:以上为个人理解,如有不正确的地方还请在评论下方指出,我及时更改。

留下你的脚步