LOOK!SpringBoot的外部化配置最全解析
本篇要点
介绍各种配置⽅式的优先级。
介绍各种外部化配置⽅式。
介绍yaml的格式及原理。
介绍如何绑定并测试类型安全的属性配置。
介绍@ConfigurationProperties与@Value的区别。
⼀、SpringBoot官⽅⽂档对于外部化配置的介绍及作⽤顺序
SpringBoot⽀持多种外部化配置,以便于开发者能够在不同的环境下,使⽤同⼀套应⽤程序代码。外部化配置的⽅式有多种:properties⽂件,yaml⽂件,Environment变量已经命令⾏参数等等。
外部化配置的属性值可以通过@Value注解⾃动注⼊,亦可以通过Spring的Environment抽象访问,也可以通过@ConfigurationProperties注解绑定到结构化对象上。
SpringBoot⽀持很多种的外部化配置,待会我们会介绍到。在这之前,我们必须要知道如果多种配置同时出现,⼀定是按照特定的顺序⽣效的。规则如下:
1. devtool处于active状态时, $HOME/.config/spring-boot ⽬录中的Devtool全局配置。
2. 测试中的@TestPropertySource注解。
3. 测试中的@SpringBootTest#properties注解特性。
4. 命令⾏参数。
5. SPRING_APPLICATION_JSON 中的属性(环境变量或系统属性中的内联JSON嵌⼊)。
6. ServletConfig 初始化参数。
7. ServletContext 初始化参数。
8. java:comp/env ⾥的JNDI属性
9. JVM系统属性 Properties() 。
10. 操作系统环境变量
11. 仅具有 random.* 属性的 RandomValuePropertySource 。
12. 应⽤程序以外的application-{profile}.properties或者application-{profile}.yml⽂件
13. 打包在应⽤程序内的application-{profile}.properties或者application-{profile}.yml⽂件
14. 应⽤程序以外的application.properties或者l⽂件
15. 打包在应⽤程序内的application.properties或者l⽂件
16. @Configuration类上的@PropertySource注解,需要注意,在ApplicationContext刷新之前,是不会将这个类中的属性加到环境中的,像
logging.,spring.main. 之类的属性,在这⾥配置为时已晚。
17. 默认属性(通过 SpringApplication.setDefaultProperties 指定).springboot结构
这⾥列表按组优先级排序,也就是说, 任何在⾼优先级属性源⾥设置的属性都会覆盖低优先级的相同属性 ,列如我们上⾯提到的命令⾏属性就覆盖了application.properties的属性。
举个例⼦吧:
如果在application.properties中设置 name=天乔巴夏 ,此时我⽤命令⾏设置 java -jar hyh.jar --author.name=summerday ,最终的name 值将会是summerday,因为命令⾏属性优先级更⾼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。