Spring Boot属性设置方法及优先级完整说明+表格对比

news2025/4/1 15:24:49

Spring Boot属性设置方法及优先级完整说明

官网参考:
https://docs.spring.io/spring-boot/3.4-SNAPSHOT/reference/features/external-config.html#features.external-config.files

属性设置方法优先级顺序(从高到低)
  1. 命令行参数--key=value
  2. SpringApplication.setDefaultProperties(默认属性)
  3. 系统属性-Dkey=value
  4. JNDI属性(通过JNDI接口)
  5. 来自java:comp/env的JNDI属性
  6. 操作系统环境变量NAME=value
  7. 随机属性random.*,需启用或显式配置)
  8. 外部配置文件application-{profile}.propertiesapplication.yml
  9. 内部配置文件application-{profile}.propertiesapplication.yml
  10. 外部通用配置文件application.propertiesapplication.yml
  11. 内部通用配置文件application.propertiesapplication.yml
  12. @PropertySource 注解
  13. @Value 注解
  14. @ConfigurationProperties 绑定
  15. Environment 直接获取

代码示例

1. 命令行参数
// 启动命令:java -jar app.jar --name=CommandLine
@Configuration
public class CommandLineConfig {
    @Value("${name:Default}") 
    private String name; // 默认值为Default

    @Bean
    public String getName() {
        return name;
    }
}

2. SpringApplication.setDefaultProperties
// 启动类中设置默认属性
public static void main(String[] args) {
    Map<String, Object> defaultProps = new HashMap<>();
    defaultProps.put("name", "SpringAppDefault");
    SpringApplication app = new SpringApplication(App.class);
    app.setDefaultProperties(defaultProps);
    app.run(args);
}

3. 系统属性
// 启动命令:java -Dname=SystemProp -jar app.jar
@Configuration
public class SystemPropConfig {
    @Value("${name:Default}") 
    private String name;

    @Bean
    public String getName() {
        return name;
    }
}

4. JNDI属性
// 需要JNDI服务器配置(如Tomcat)
// JNDI绑定示例(需实现JNDI环境):
// Context context = new InitialContext();
// context.bind("java:comp/env/name", "JNDIValue");

@Configuration
public class JndiConfig {
    @Value("${name:Default}") 
    private String name;

    @Bean
    public String getName() {
        return name;
    }
}

5. 操作系统环境变量
# 在操作系统中设置环境变量
export NAME=OsEnvVar
@Configuration
public class OsEnvConfig {
    @Value("${name:Default}") 
    private String name;

    @Bean
    public String getName() {
        return name;
    }
}

6. 随机属性(random.*
# application.properties
random.name=RandomValue
@Component
public class RandomBean {
    @Value("${name:Default}") 
    private String name;

    public String getName() {
        return name;
    }
}

7. 外部/内部配置文件(带profile)
# 外部配置文件:application-dev.properties(优先级高于内部文件)
name=ExternalProfile
# 内部配置文件:src/main/resources/application-dev.yml
name: InternalProfile
// 启动时指定profile:
java -jar app.jar --spring.profiles.active=dev

8. @PropertySource
@Configuration
@PropertySource("classpath:custom.properties") // 指定自定义配置文件
public class PropertySourceConfig {
    @Value("${name:Default}") 
    private String name;

    @Bean
    public String getName() {
        return name;
    }
}
# custom.properties
name=PropertySource

9. Environment 直接获取
@Service
public class EnvironmentService {
    @Autowired
    private Environment env;

    public String getName() {
        return env.getProperty("name", "Default");
    }
}

对比表格

方法使用方式优先级适用场景示例代码片段
命令行参数--key=value 启动时指定最高运行时动态覆盖配置java -jar app.jar --name=CommandLine
SpringApplication.setDefaultProperties通过代码设置默认属性(启动类中配置)程序启动前设置默认值app.setDefaultProperties(defaultProps)
系统属性-Dkey=value 启动时指定次之JVM 级别配置java -Dname=SystemProp -jar app.jar
JNDI属性通过JNDI接口绑定(需JNDI服务器支持)较高企业级环境(如Tomcat)中的集中配置new InitialContext().bind("java:comp/env/name", "JNDIValue")
java:comp/env 的JNDI属性通过java:comp/env前缀绑定中高标准化JNDI配置路径@Value("${name}") 绑定到java:comp/env/name
操作系统环境变量操作系统设置环境变量(如export NAME=Value中高跨平台环境变量配置export NAME=OsEnvVar
随机属性(random.*在配置文件中设置random.*前缀的属性中等生成随机值(如密码、密钥)random.name=RandomValue
外部配置文件(带profile)独立于jar的application-{profile}.propertiesapplication.yml中等环境特定配置(如dev/test/prod)src/main/resources/application-dev.properties
内部配置文件(带profile)jar包内的application-{profile}.propertiesapplication.yml中等内置环境配置src/main/resources/application-dev.yml
外部通用配置文件独立于jar的application.propertiesapplication.yml中低通用配置覆盖内部文件src/main/resources/application.properties
内部通用配置文件jar包内的application.propertiesapplication.yml中低基础配置src/main/resources/application.yml
@PropertySource@Configuration类中通过注解指定外部属性文件较低自定义配置文件绑定@PropertySource("classpath:custom.properties")
@Value直接注入字段较低简单单值注入@Value("${name}") private String name;
@ConfigurationProperties绑定POJO对象到配置前缀最低复杂对象配置绑定@ConfigurationProperties(prefix = "user")
Environment通过Environment抽象类获取属性最低需要灵活获取多种属性的场景env.getProperty("name", "Default")

优先级验证示例

假设同时设置以下属性:

  • 命令行参数--name=CommandLine
  • 系统属性-Dname=SystemProp
  • 环境变量export NAME=OsEnvVar
  • 配置文件application.properties 中设置 name=ConfigFile

实际运行时,CommandLine 的值会生效,因为命令行参数的优先级最高。如果移除命令行参数,则系统属性的值 SystemProp 会生效,依此类推。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于改进粒子群算法的多目标分布式电源选址定容规划(附带Matlab代码)

通过分析分布式电源对配电网的影响&#xff0c;以有功功率损耗、电压质量及分布式电源总容量为优化目标&#xff0c;基于模糊理论建立了分布式电源在配电网中选址定容的多目标优化模型&#xff0c;并提出了一种改进粒子群算法进行求解。在算例仿真中&#xff0c;基于IEEE-14标准…

SAP 学习笔记 - 系统移行业务 - MALSY(由Excel 移行到SAP 的收费工具)

以前有关移行&#xff0c;也写过一些文章&#xff0c;比如 SAP 学习笔记 - 系统移行业务 - Migration cockpit工具 - 移行Material&#xff08;品目&#xff09;-CSDN博客 SAP 学习笔记 - 系统移行业务 - Migration cockpit工具2 - Lot导入_sap cockpit-CSDN博客 SAP学习笔记…

2025美国网络专线国内服务商推荐

在海外业务竞争加剧的背景下&#xff0c;稳定高效的美国网络专线已成为外贸企业、跨国电商及跨国企业的刚需。面对复杂的国际网络环境和严苛的业务要求&#xff0c;国内服务商Ogcloud凭借其创新的SD-WAN技术架构与全球化网络布局&#xff0c;正成为企业拓展北美市场的优选合作伙…

如何正确地在 Postman 中添加认证 Token?

在 Postman 中设置 token。我们知道 HTTP 是无状态的。token 是保持用户的登录状态或者其他数据的一种机制&#xff0c;从而让用户在不同页面之间保持一致的体验。 在 Postman 中添加认证 token 教程

SpringCould微服务架构之Docker(6)

容器的基本命令&#xff1a; 1. docker exec &#xff1a;进入容器执行命令 2. docker logs: -f 持续查看容器的运行日志 3. docker ps&#xff1a;查看所有运行的容器和状态 案例&#xff1a;创建运行一个容Nginx容器 docker run--name myNginx -p 80:80 -d nginx 命…

Linux|gitlab|二进制快速安装部署gitlab-ce教程

一、 gitlab二进制文件下载地址&#xff1a; 官方网站: gitlab/gitlab-ce - Packages packages.gitlab.com 清华镜像站&#xff1a; Index of /gitlab-ce/yum/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror gitlab分为ce也就是社区版本和ee版本&#xff0c;…

NixVis 开源轻量级 Nginx 日志分析工具

NixVis NixVis 是一款基于 Go 语言开发的、开源轻量级 Nginx 日志分析工具&#xff0c;专为自部署场景设计。它提供直观的数据可视化和全面的统计分析功能&#xff0c;帮助您实时监控网站流量、访问来源和地理分布等关键指标&#xff0c;无需复杂配置即可快速部署使用。 演示…

vscode正则表达式使用

小标题 ^\d.\d.\d\s.*$ ^表示匹配字符串的开头。\d\.\d\.\d表示匹配一到多个数字&#xff0c;接着一个小数点&#xff0c;再接着一到多个数字&#xff0c;然后又一个小数点和一到多个数字&#xff0c;用来匹配类似 “2.1.1” 这样的标题号部分。\s表示匹配一个空格。.*表示匹配…

OpenAI API - Realtime 实时

文章目录 实时 API&#xff08;Beta&#xff09;使用实时API入门示例应用合作伙伴集成 用例通过 WebRTC 连接概述连接详情创建一个临时token发送和接收事件 使用 WebSockets 连接概述连接详情 实时对话Beta实时语音到语音会话会话生命周期事件文本输入和输出音频输入和输出语音…

PE文件(十三)资源表

所谓的资源也就是我们之前学的MFC中的对话框&#xff0c;按钮&#xff0c;编辑框之类的东西。不仅MFC有资源&#xff0c;我们平时熟悉的控制台程序也有资源 当我们平时写一些程序或者木马时&#xff0c;我们通常对其定义一个随机的名称或者路径&#xff0c;然后再向外界进行释…

丝杆升降机行程控制:精准运行的奥秘

丝杆升降机作为机械传动领域的 “得力干将”&#xff0c;在环保设备、工业生产线、建筑施工等众多场景中发挥着关键作用。其能够实现重物的升降、平移等操作&#xff0c;而行程控制对于丝杆升降机而言&#xff0c;就如同给机器设定了行动边界&#xff0c;不仅关乎设备能否精准达…

力扣.旋转矩阵Ⅱ

59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; class Solution {const int MAX25; public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans;vector<int> hang;int len_nn;int arry[25][25]…

HFSS 使用入门

资源 下载资源&#xff1a; https://download.csdn.net/download/wangjun_huster/90547193 下载破解&#xff1a; https://download.csdn.net/download/wangjun_huster/90547551 安装 https://www.bilibili.com/list/ml3403866295?oid925751664&bvidBV1CT4y1u7LB 入门…

对内核fork进程中写时复制的理解记录

前言 文章写于学习Redis时对aof后台重写中写时复制的疑问 一、感到不理解的歧义 在部分技术文档中&#xff08;以小林的文章为例&#xff09;&#xff0c;对写时复制后的内存权限存在如歧义&#xff1a; ! 二、正确技术表述 根据Linux内核实现&#xff08;5.15版本&#x…

HarmonyOS-ArkUI Navigation (导航组件)-第一部分

导航组件主要实现页面间以及组件内部的界面跳转&#xff0c;支持在不同的组件间进行参数的传递&#xff0c;提供灵活的跳转栈操作&#xff0c;从而便捷的实现对不同页面的访问和复用。 我们之前学习过Tabs组件&#xff0c;这个组件里面也有支持跳转的方式&#xff0c;Navigati…

【磁盘扩容】linux磁盘扩容

一、新磁盘分区 1、新磁盘在接入服务器后&#xff0c;很好辨认 使用fdisk -l命令&#xff0c;查看&#xff1a; 或者使用 lsblk -f 其中sdb,sdc, sda都是挂载硬盘&#xff0c;sr0为DVD光盘&#xff0c;很明显sdc没有进行任何的挂载&#xff0c;确定sdc为新磁盘 2、格式化新…

详解CountDownLatch底层源码

大家好&#xff0c;我是此林。 今天来分享一下CountDownLatch的底层源码。 CountDownLatch 是 Java 并发包 (java.util.concurrent) 中的线程之间同步工具类&#xff0c;主要用于协调多个线程的执行顺序。其核心思想是通过计数器实现线程间的"等待-唤醒"机制&#…

Python基于EdgeTTS库文本转语音

EdgeTTS&#xff0c;支持粤语等各种方言&#xff0c;无需部署无需Key&#xff0c;完全免费&#xff0c;太香了 因为其底层是使用微软 Edge 的在线语音合成服务&#xff0c;所以不需要下载任何模型&#xff0c;甚至连 api_key 都给你省了&#xff0c;简直不要太良心~ 关键是&a…

MFC案例:利用计时器(Timer)动态绘制正弦曲线

这是一个基于对话框的MFC程序&#xff0c;运行效果是在只画出I、IV象限的坐标系中绘制出红、蓝、绿各相差PI/2的三条正弦曲线&#xff0c;计时器运行一个周期曲线在X轴移动一个像素&#xff08;对应1度&#xff09;&#xff0c;Y轴显示正弦值&#xff08;150个像素代表1&#x…

解析 HTML 网站架构规范

2025/3/28 向全栈工程师迈进&#xff01; 一、网页基本的组成部分 网页的外观多种多样&#xff0c;但是除了全屏视频或游戏&#xff0c;或艺术作品页面&#xff0c;或只是结构不当的页面以外&#xff0c;都倾向于使用类似的标准组件。 1.1页眉 通常横跨于整个页面顶部有一…