spring boot的自动配置与配置的优先级

什么是⾃动配置?

Spring Boot 提供了默认的配置,如默认的 Bean ,去运⾏ Spring 应⽤。它是⾮侵⼊式的,只提供⼀个默认实现。

⼤多数情况下,⾃动配置的 Bean 满⾜了现有的业务场景,不需要去覆盖。但如果⾃动配置做的不够好,需要覆盖配置。⽐如通过命令⾏动态指定某个 jar ,按不同环境启动。那怎么办?这⾥先要考虑到配置的优先级。

Spring Boot 不单单从 application.properties 获取配置,所以我们可以在程序中多种设置配置属性。按照以下列表的优先级排列:

  • 1. 命令⾏参数
  • 2. java:comp/env ⾥的 JNDI 属性
  • 3. JVM 系统属性
  • 4. 操作系统环境变量
  • 5. RandomValuePropertySource 属性类⽣成的 random.* 属性
  • 6. 应⽤以外的 application.properties(或 yml)⽂件
  • 7. 打包在应⽤内的 application.properties(或 yml)⽂件
  • 8. 在应⽤ @Configuration 配置类中,⽤ @PropertySource 注解声明的属性⽂件
  • 9. SpringApplication.setDefaultProperties 声明的默认属性

可⻅,命令⾏参数优先级最⾼。这个可以根据这个优先级,可以在测试或⽣产环境中快速地修改配置
参数值,⽽不需要重新打包和部署应⽤。

还有第 6 点,根据这个在多 moudle 的项⽬中,⽐如常⻅的项⽬分 api 、service、dao 等 moudles,往往会加⼀个 deploy moudle 去打包该业务各个⼦ moudle,应⽤以外的配置优先。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享