关于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异步无法获取用户认证信息的解决方法

    Spring Security异步无法获取用户认证信息的解决方法

    最近使用 Springboot 中 @Async 注解异步调用方法时,发现无法获取到用户认证信息,本文小编给大家介绍了Spring Security异步无法获取用户认证信息的原因和解决方法,并通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • java -jar命令的具体使用

    java -jar命令的具体使用

    java -jar命令是一种方便快捷地在命令行中运行Java可执行jar文件的方法,本文主要介绍了java -jar命令的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 排查Java应用内存泄漏问题的步骤

    排查Java应用内存泄漏问题的步骤

    这篇文章主要介绍了排查Java应用内存泄漏问题的步骤,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-11-11
  • SpringBoot多环境日志配置方式

    SpringBoot多环境日志配置方式

    SpringBoot 默认使用LogBack日志系统,默认情况下,SpringBoot项目的日志只会在控制台输入,本文给大家介绍SpringBoot多环境日志配置方式,需要的朋友可以参考下
    2024-08-08
  • SpringBoot中的拦截器细节解析

    SpringBoot中的拦截器细节解析

    这篇文章主要介绍了SpringBoot中的拦截器细节解析,拦截器的概念、作用、实现方式、执行顺序、生命周期以及高级应用,最后,我们还将探讨拦截器的性能优化策略和常见问题,需要的朋友可以参考下
    2023-09-09
  • SpringBoot实现过滤器拦截器的耗时对比

    SpringBoot实现过滤器拦截器的耗时对比

    这篇文章主要为大家详细介绍了SpringBoot实现过滤器拦截器的输出接口耗时对比,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-06-06
  • springboot整合多数据源配置方式

    springboot整合多数据源配置方式

    这篇文章主要介绍了springboot整合多数据源配置,多数据源整合springboot+mybatis使用分包方式整合,springboot+druid+mybatisplus使用注解整合,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • java数据结构与算法之马踏棋盘

    java数据结构与算法之马踏棋盘

    这篇文章主要为大家详细介绍了java数据结构与算法之马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • java文件读写操作实例详解

    java文件读写操作实例详解

    java的io流读取数据使用io流读取文件和向文件中写数据,这篇文章主要给大家介绍了关于java文件读写操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • springboot实现单文件和多文件上传

    springboot实现单文件和多文件上传

    这篇文章主要为大家详细介绍了springboot实现单文件和多文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论