Java Spring Boot 修改yml配置&加载顺序规则
Spring Boot 的配置加载顺序规则
Spring Boot 有非常明确的配置加载顺序和优先级规则:
1. 格式优先级高于Profile
对于相同名称的配置文件,文件格式的优先级是固定的,与加载顺序无关:
.properties > .yml > .yaml
也就是说,如果同时存在 application-vipsoft.properties 和 application-vipsoft.yml:
application-vipsoft.properties中的配置会覆盖application-vipsoft.yml中的相同配置- 这是由Spring Boot的设计决定的,properties文件的优先级永远高于yml/yaml文件
2. 配置加载顺序
Spring Boot 按以下顺序加载配置(后面的覆盖前面的):
- Jar包内的
application.yml(或application.properties) - Jar包内的
application-{profile}.yml - Jar包外(同一目录)的
application.yml - Jar包外(同一目录)的
application-{profile}.yml - Jar包外(同一目录)的
application.properties - Jar包外(同一目录)的
application-{profile}.properties← 优先级最高 - 命令行参数
- 环境变量
配置方案
有时候运行好多年的系统,突然要改个配置。新的程序可能会产生BUG,那如何更新已有 yml 的值,有如下操作
参数形式
适合改动较少的情况
echo on
REM 后续命令使用的是:UTF-8编码
echo chcp 65001
title HIS API DEV 8090
"%JAVA_HOME%\bin\java" -Dloader.path=D:\Software\JavaLib -Dfile.encoding=UTF-8 -jar his-web-1.0.0.jar --server.port=8090 --spring.profiles.active=vipsoft
pause
使用配置文件(推荐,最清晰、最易维护)
这是Spring Boot应用的首选方式。将那些不常改变的参数(尤其是数据库连接、API地址等)移动到配置文件中。
- 创建/修改 application-vipsoft.yml 文件
由于您已经指定了 --spring.profiles.active=vipsoft,Spring Boot会自动加载 application-vipsoft.yml。将这个文件放在与您的jar包同一目录下
server:
port: 22588
his:
api-url: http://192.168.0.1/webservice/service.asmx?wsdl
spring:
datasource:
his:
url: http://192.168.0.1/webservice/service.asmx?wsdl
username: username
password: pwd
- 简化后的启动命令
现在,启动命令变得非常干净,只需要关注核心的JVM参数和配置文件激活。
echo on
REM 后续命令使用的是:UTF-8编码
echo chcp 65001
title HIS API DEV 8090
"%JAVA_HOME%\bin\java" -Dloader.path=D:\Software\JavaLib -Dfile.encoding=UTF-8 -jar his-web-1.0.0.jar --server.port=8090 --spring.profiles.active=vipsoft
pause
优点:
- 命令极其简洁,不易出错。
- 配置与代码分离,安全性更高(尤其是密码)。
- 修改配置无需重新打包jar文件。
- 不同环境(如测试、生产)可以轻松使用不同的配置文件。
使用Shell脚本或Batch文件(Windows批处理)
对于Windows,创建一个 startup.bat 文件。
@echo off
title HIS API DEV 8090
set JAVA_OPTS=-Dloader.path=D:\Software\JavaLib -Dfile.encoding=UTF-8
set SPRING_OPTS=--spring.profiles.active=vipsoft --server.port=8090
set HIS_OPTS=--his.api-url=http://192.168.0.1/webservice/service.asmx?wsdl
set DS_OPTS=--spring.datasource.his.url="jdbc:sqlserver://192.168.0.2:1433;DatabaseName=XXX" --spring.datasource.his.username=username --spring.datasource.his.password=pwd
echo Starting application...
"%JAVA_HOME%\bin\java" %JAVA_OPTS% -jar his-web-1.0.0.jar %SPRING_OPTS% %HIS_OPTS% %DS_OPTS%
pause
优点:
- 逻辑清晰,参数被分类设置。
- 一键启动,避免了每次输入长命令。
- 易于维护和修改参数。
使用环境变量
Spring Boot可以从环境变量中读取配置,这是一种非常云原生的做法。
- 设置环境变量(可以在批处理文件中设置,也可以在系统高级设置中设置)
set SPRING_DATASOURCE_HIS_URL=jdbc:sqlserver://192.168.0.2:1433;DatabaseName=XXX
set SPRING_DATASOURCE_HIS_USERNAME=username
set SPRING_DATASOURCE_HIS_PASSWORD=pwd
set HIS_API_URL=http://192.168.0.1/webservice/service.asmx?wsdl
注意:Spring Boot将大写环境变量中的 _ 视为配置中的 .,例如 SPRING_DATASOURCE_HIS_URL 对应 spring.datasource.his.url。
2. 启动命令
echo on
REM 后续命令使用的是:UTF-8编码
echo chcp 65001
title HIS API DEV 8090
"%JAVA_HOME%\bin\java" -Dloader.path=D:\Software\JavaLib -Dfile.encoding=UTF-8 -jar his-web-1.0.0.jar --server.port=8090 --spring.profiles.active=vipsoft
pause
优点:
- 安全性高,敏感信息(如密码)不出现在命令行或配置文件中。
- 配置非常灵活,特别适合Docker、Kubernetes等容器化部署。
最佳实践建议
- 检查jar包内:先用解压软件查看jar包内是否已有
application-vipsoft.yml - 保持一致:外部配置文件格式尽量与内部保持一致
- 外部配置优先:将需要修改的配置放在jar包外部的配置文件中,这样升级jar包时配置不会丢失
- 敏感信息处理:密码等敏感信息最好不要写在配置文件中,而是通过环境变量或命令行参数传入
最终建议:检查jar包内的配置格式,然后在外部使用相同格式的配置文件,这样最清晰易懂。
Java Spring Boot 修改yml配置&加载顺序规则的更多相关文章
- SpringBoot——配置文件加载位置及外部配置加载顺序
声明 本文部分转自:SpringBoot配置文件加载位置与优先级 正文 1. 项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者applic ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- java中带继承类的加载顺序详解及实战
一.背景: 在面试中,在java基础方面,类的加载顺序经常被问及,很多时候我们是搞不清楚到底类的加载顺序是怎么样的,那么今天我们就来看看带有继承的类的加载顺序到底是怎么一回事?在此记下也方便以后复习巩 ...
- SpringBoot笔记--文件配置加载顺序+整合其他框架
内部文件配置加载顺序 外部文件配置加载顺序 jar包配置 整合Junit 若是业务管理类和测试类在同一个包下面,那么这句话, 可以不加括号,只写注解名称 否则,就必须指定到包下面,不然会报错 整合Re ...
- Spring Boot 配置加载顺序详解
使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 ...
- 【串线篇】spring boot外部配置加载顺序
SpringBoot也可以从以下位置加载配置: 原则仍然是优先级从高到低:高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 java -j ...
- Spring Boot配置加载顺序
如果加载的配置有重复的,它们的加载顺序是这样的,数字越小的优先级越高,即优先级高的覆盖优先级低的配置. Devtools global settings properties on your home ...
- spring boot的静态资源加载
1.spring boot默认资源处理 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. spring boot默认加载文 ...
- (转)面试题--JAVA中静态块、静态变量加载顺序详解
public class Test { //1.第一步,准备加载类 public static void main(String[] args) { new Test(); //4.第四步,new一个 ...
- web.xml 配置 加载顺序
web.xml 的加载顺序是:context-param -> listener -> filter -> servlet . 过滤器执行顺序是根据filter-mapping ,不 ...
随机推荐
- SparkSQL编程需注意的细节
SparkSQL是把Hive转为字符串后,以参数形式传递到SparkSession.builder().enableHiveSupport().getOrcCreate().sql(Hive_Stri ...
- ShadowSql.net之正确使用方式
ShadowSql是面向接口模块化可插拔可扩展的工具 ShadowSql不是全家桶 不把所有功能都做一个项目里面就是为了大家不一次引用所有的nuget包 大家可以先判断需要哪些功能,再引用对应的nug ...
- Kubernetes初学乍练(资源管理)
1.资源管理介绍 在Kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理Kubernetes.怎么理解,就好比我们常说的面向对象语言,一切皆对象. Kubernetes的本质就是 ...
- 插件分享 | 善用 VSCode 内置的效率神器 Emmet 插件提升前端开发效率
在 VSCode 出现之前,Emmet 插件就在前端领域玩得风生水起,当时的 Sublime Text 装上此插件,前端的编码效率那感觉就如同 2G 网络到 5G 网络的差别一般. 后来 VSCode ...
- 数据库的DML与DQL语句
1: DML语句 insert into values 1 insert into 表 values(值1,值2,值n); 2 insert into 表(字段1,字段2,字段n) values( ...
- Squid代理配置使用
1.Squid简单说明 Squid Cache(简称为Squid)是HTTP代理服务器软件.Squid用途广泛,可以作为缓存服务器,可以过滤流量帮助网络安全,也可以作为代理服务器链中的一环,向上级代理 ...
- 微信小程序里 wx:for和wx:for-item区别(补充下wx:key)
wx:for 一维数组情况: 在页面上 view wx:for ="{{list}}" {{item.id}} view 是循环list item是List的别名 多维数组情况 ...
- 自学stm32,需要会到什么程度能找到一份工作?
自学STM32,需要会到什么程度能找到一份工作?一个十年老兵的真心话 前言:一个改变命运的选择 每次有人问我"自学STM32到什么程度能找工作"这个问题,我都会想起十年前那个迷茫的 ...
- C# Newtonsoft.Json null 转空值{} 把对象null转换{}为JSON字符串
/// <summary> /// 把对象null转换{}为JSON字符串 /// </summary> /// <param name="o"> ...
- Xamarin.Android - 防止 AlertDialog 在 PositiveButton 的使用方法
https://www.coder.work/article/399382 var builder = new AlertDialog.Builder(this); View v = LayoutIn ...