关于SpringBoot配置项的优先级,不再有配置不生效的问题

 更新时间:2025年04月08日 09:08:30   作者:学会了没  
这篇文章主要介绍了关于SpringBoot配置项的优先级,不再有配置不生效的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

优先级原理介绍

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

优先级越高的意思就是: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

优先级顺序

优先级配置项说明使用说明
1java启动命令行参数java -jar xxx.jar --key=value
2在J2EE容器里面配配置J2EE 容器属于古老过时技术,使用复杂,后面再专题介绍
3java 系统属性 (System.getProperties())

java -Dkey=value -jar your-application.jar

注意点: -Dkey=value 等号左右不能有空格

4操作系统环境变量大家经常配置系统环境变量,不做解释
5Spring 内置随机变量

主要测试场景,比如你想生成一个int随机数,直接用即可:

@Value("${random.int}")

private int random;

如果你的启动命令行也配置了 random.int,那么启动命令行优先级高

java -jar xxx.jar --random.int=100

6jar包外部 application-{profile}.propertiesjava -jar your-springboot-app.jar --spring.config.location=file:/config/application-dev.properties
7jar包内部 application-{profile}.properties项目源代码src/main/resources对应的配置文件,会自动打包到jar里面
8jar包外部 application.properties和6类似,只是文件名是固定的
9jar包内部 application.properties和7类似,只是文件名是固定的
10@PropertySource annotations on your @Configuration classes需要自己实现配置项获取逻辑,spring预留的接口,比如apollo配置服务,这种中间件都是通过这个接口实现从远程服务器加载配置项的
11SpringApplication.setDefaultProperties调用spring接口代码里面硬编码

JNDI简单介绍

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解利用spring-security解决CSRF问题

    详解利用spring-security解决CSRF问题

    这篇文章主要介绍了详解利用spring-security解决CSRF问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Springboot2整合knife4j过程解析

    Springboot2整合knife4j过程解析

    这篇文章主要介绍了Springboot2整合knife4j过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Mybatis返回插入主键id的方法

    Mybatis返回插入主键id的方法

    这篇文章主要介绍了 Mybatis返回插入主键id的方法,在文章底部给大家补充了Mybatis中insert中返回主键ID的方法,非常不错,需要的朋友可以参考下
    2017-04-04
  • 使用PoolingHttpClientConnectionManager实现http连接池过程

    使用PoolingHttpClientConnectionManager实现http连接池过程

    文章主要介绍了`PoolingHttpClientConnectionManager`实现HTTP连接池的原理、依赖实现、定时回收链接的方法,以及如何正确释放连接以复用
    2025-11-11
  • SpringCloud Config使用本地仓库及map注入

    SpringCloud Config使用本地仓库及map注入

    这篇文章主要介绍了SpringCloud Config使用本地仓库及map注入,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java 内存模型中的happen-before关系详解

    Java 内存模型中的happen-before关系详解

    这篇文章主要为大家介绍了Java 内存模型中的happen-before关系示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Java调用echarts提供的地图压缩方法来压缩地图

    Java调用echarts提供的地图压缩方法来压缩地图

    今天小编就为大家分享一篇关于Java调用echarts提供的地图压缩方法来压缩地图,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 让IntelliJ IDEA支持.vue文件的方法

    让IntelliJ IDEA支持.vue文件的方法

    这篇文章主要介绍了让IntelliJ IDEA支持.vue文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • jsoup 框架的使用小结

    jsoup 框架的使用小结

    jsoup 是一款基于Java的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于 DOM、CSS 或者jQuery的方法来操作数据,所以jsoup也可以被当做爬虫工具使用,这篇文章主要介绍了jsoup使用,需要的朋友可以参考下
    2023-04-04
  • Java实现abc字符串排列组合

    Java实现abc字符串排列组合

    这篇文章主要为大家详细介绍了JAVA实现abc字符串的排列组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02

最新评论