问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

彻底弄懂SpringBoot配置项的优先级,不再有配置不生效的问题

创作时间:
作者:
@小白创作中心

彻底弄懂SpringBoot配置项的优先级,不再有配置不生效的问题

引用
CSDN
1.
https://blog.csdn.net/zfj321/article/details/144406161

Spring Boot的配置项优先级机制是开发过程中经常遇到的问题。本文详细介绍了不同配置来源的优先级顺序,帮助开发者理解Spring Boot配置项的加载机制,避免配置不生效的问题。

下表中各种配置的优先级,序号越小优先级越高。

优先级越高的意思就是:Spring按照序号的顺序,由小到大到各种源头查找配置项,找到了,就不继续找后面的源了。

举例说明:

当spring.profiles.active=dev时候,

源代码resources目录下有两个配置文件:application.properties 和 application-dev.properties

按照下表规则:

application-dev.properties 优先级为7

application.properties 优先级为9

application-dev.properties 和 application.properties 同时配置了jdbc相关配置,那么生效的是 application-dev.properties

优先级
配置项说明
使用说明
1
java启动命令行参数
java -jar xxx.jar --key=value
2
在J2EE容器里面配配置
J2EE 容器属于古老过时技术,使用复杂,后面再专题介绍
3
java 系统属性 (System.getProperties())
java -Dkey=value -jar your-application.jar 注意点: -Dkey=value 等号左右不能有空格
4
操作系统环境变量
大家经常配置系统环境变量,不做解释
5
Spring 内置随机变量
主要测试场景,比如你想生成一个int随机数,直接用即可: @Value("${random.int}") private int random; 如果你的启动命令行也配置了 random.int,那么启动命令行优先级高 java -jar xxx.jar --random.int=100
6
jar包外部 application-{profile}.properties
java -jar your-springboot-app.jar --spring.config.location=file:/config/application-dev.properties
7
jar包内部 application-{profile}.properties
项目源代码src/main/resources对应的配置文件,会自动打包到jar里面
8
jar包外部 application.properties
和6类似,只是文件名是固定的
9
jar包内部 application.properties
和7类似,只是文件名是固定的
10
@PropertySource annotations on your @Configuration classes
需要自己实现配置项获取逻辑,spring预留的接口,比如apollo配置服务,这种中间件都是通过这个接口实现从远程服务器加载配置项的
11
SpringApplication.setDefaultProperties
调用spring接口代码里面硬编码

需要在J2EE容器里面配置,以Tomcat为例,需要在tomcat 的Server.xml Context.xml 中配置JNDI, 然后使用的地方jndi-lookup , JNDI是比较古老的技术,现在基本上废弃了。

Web.xml 中查找,从容器中查找变量,将变量暴漏给当前应用, 当前应用就直接可以使用了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号