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

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@Beanpublic 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;@Beanpublic 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;@Beanpublic String getName() {return name;}
}

5. 操作系统环境变量
# 在操作系统中设置环境变量
export NAME=OsEnvVar
@Configuration
public class OsEnvConfig {@Value("${name:Default}") private String name;@Beanpublic 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;@Beanpublic String getName() {return name;}
}
# custom.properties
name=PropertySource

9. Environment 直接获取
@Service
public class EnvironmentService {@Autowiredprivate 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.mzph.cn/pingmian/73605.shtml

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

相关文章

上门家政小程序实战,从0到1解决方案

一、逻辑分析 上门家政小程序主要涉及用户端和服务端两大部分。用户端需要实现服务浏览、预约下单、订单跟踪等功能&#xff1b;服务端则要处理订单管理、服务人员管理、数据统计等任务。以下是详细的功能模块分析&#xff1a; 用户注册与登录&#xff1a;用户通过手机号或第三…

LLVM学习-DragonEgg工具

2.2.2 使用DragonEgg和LLVM工具了解编译流程 如果希望看到前端的运行情况&#xff0c;请使用-S -fplugin-arg-dragonegg-emit-ir标志&#xff0c;该标志将产生以LLVM IR代码表示的人工可读文件。 一旦编译器将程序转换为IR则停止编译&#xff0c;并将内存中的表示内容写入磁盘的…

关于cmd中出现无法识别某某指令的问题

今天来解决以下这个比较常见的问题&#xff0c;安装各种软件都可能会发生&#xff0c;一般是安装时没勾选注册环境变量&#xff0c;导致cmd无法识别该指令。例如mysql&#xff0c;git等&#xff0c;一般初学者可能不太清楚。 解决这类问题最主要的是了解环境变量的概念&#x…

ThreadLocal详解与高频场景实战指南

ThreadLocal详解与高频场景实战指南 1. ThreadLocal概述 ThreadLocal是Java提供的线程本地变量机制&#xff0c;用于实现线程级别的数据隔离。每个访问该变量的线程都会获得独立的变量副本&#xff0c;适用于需要避免线程间共享数据的场景。 特点&#xff1a; 线程封闭性&a…

【C++初阶】---类和对象(上)

1.类的定义 1.1类的定义格式 • class为定义类的关键字&#xff0c;Data为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。 •…

Rust安装并配置配置vscode编译器

一. 下载rustup-init.exe rust下载网址&#xff1a;Getting started - Rust Programming Language 根据系统&#xff0c;选择适合的exe文件 我选择的的是右边64bit的 打开下载的文件 输入1&#xff0c;回车 二. Visual C 安装 自动下载安装vs 等待安装完毕 三. Rust 安装…

openGl片段着色器的含义

片段着色器的含义及代码中的应用说明&#xff1a; 1. 片段着色器的基本概念 片段着色器&#xff08;Fragment Shader&#xff09;是OpenGL着色器管线中的关键组件&#xff0c;主要用于计算屏幕空间中每个片段&#xff08;对应像素&#xff09;的最终颜色。它是图形渲染流程的…

事务的四大特性(ACID)详解

事务的四大特性&#xff08;ACID&#xff09;详解 在数据库管理系统&#xff08;如 MySQL&#xff09;中&#xff0c;事务&#xff08;Transaction&#xff09; 是指一组要么全部执行、要么全部不执行的数据库操作&#xff0c;通常用于确保数据的完整性和一致性。事务有四大核…

ubuntu设置开机自动运行应用

系统版本&#xff1a;Ubuntu 24.04.1 LTS桌面版 按招网上的资料显示&#xff0c;当前版本主要的实现方式有以下两种&#xff0c; 方式1&#xff1a;通过图形界面的【启动应用程序】设置开机自启动&#xff1b;方式2&#xff1a;配置为服务实现开机自启动。 但是在我的电脑上方…

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…

机器人原点丢失后找回原点的解决方案与步骤

机器人原点丢失后找回原点的解决方案与步骤 在机器人运行过程中&#xff0c;原点丢失可能导致定位错误、运动失控等问题&#xff0c;常见于机械臂、AGV&#xff08;自动导引车&#xff09;、3D打印机等设备。以下是针对原点丢失问题的系统性解决方案及详细步骤&#xff0c;涵盖…

HCIP——园区网、VLAN

园区网 园区网搭建核心思路&#xff1a;冗余&#xff08;备份&#xff09;--- 保证其健壮性 1、设备冗余 2、线路冗余 3、网关冗余 4、ups&#xff08;不间断电源&#xff09;冗余—— 能不断电&#xff08;物理层&#xff09; 三层交换机和路由器的选择&#xff1a; 三层交换…

虚拟机(二):Android 篇

虚拟机&#xff08;一&#xff09;&#xff1a;Java 篇 虚拟机&#xff08;二&#xff09;&#xff1a;Android 篇 Dalvik和JVM区别 Dalvik 基于寄存器&#xff0c;而 JVM 基于栈。 基于栈的架构具有更好的可移植性&#xff0c;因为其实现不依赖于物理寄存器基于栈的架构通常指…

Android Token的原理和本地安全存储

Android Token的原理和本地安全存储 前言 在移动应用开发中,Token是实现用户身份验证和授权的重要机制。本文将深入介绍Token的原理,以及在Android平台上如何安全地存储Token,帮助开发者构建可靠的身份验证系统。 基础知识 1. Token概述 1.1 Token的作用 身份验证授权访…

Vue Kubernetes项目 局部布局 下拉菜单

下拉菜单 [el-dropdown] 下拉菜单也比较简单&#xff0c;就是类似于按钮下面来一个下拉菜单。 示例Demo如下&#xff1a; <template><el-dropdown><span class"el-dropdown-link">下拉菜单<i class"el-icon-arrow-down el-icon--right&q…

Android之卡片式滑动

文章目录 前言一、效果图二、实现步骤1.主界面xml2.自定义的viewpage3.卡片接口类4.阴影和缩放变化类5.卡片adapter6.卡片adapter的xml7.style8.CardItem9.activity实现10.指示器drawable 总结 前言 对于这个需求&#xff0c;之前的项目也有做过&#xff0c;但是过于赶项目就没…

(UI自动化测试web端)第二篇:元素定位的方法_css定位之css选择器

看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写&#xff1f; 文章介绍了第三种写法css选择器&#xff0c;你要根据网页中的实际情况来判断自己到底要用哪一种方法来进行元素定位。每种方法都要多练习&#xff0c;全都熟了之后你在工作当中使用起来元素定位…

使用vscode搭建pywebview集成vue项目示例

文章目录 前言环境准备项目源码下载一、项目说明1 目录结构2 前端项目3 后端项目获取python安装包(选择对应版本及系统) 三、调试与生成可执行文件1 本地调试2 打包应用 四、核心代码说明1、package.json2、vite.config.ts设置3、main.py后端入口文件说明 参考文档 前言 本节我…

C stm32f10x LED亮

#include<stm32f10x.h>int main(){#if 0 //APIOA 时钟初始化unsigned int * p(unsigned int*)0x40021018;*p | 0x1<<2;//A0 推挽输出p(unsigned int*)0x40010800;*p *p & ~0xf | 0x1;//A0低电平p(unsigned int*)0x4001080c;*p & ~0x1;#endifRCC->APB2E…

redux ,react-redux,redux-toolkit 简单总结

Redux、React-Redux 和 Redux Toolkit 是协同工作的三个库&#xff0c;各自承担不同角色&#xff0c;相互协同。 Redux&#xff1a;基础底座 底层状态管理库&#xff0c;负责状态存储、Action 派发和 Reducer 执行 ​React-Redux&#xff1a;连接 React 组件与 Redux Store 通…