Java Spring Boot 修改yml配置&加载顺序规则

Java Spring Boot 修改yml配置&加载顺序规则

目录

Spring Boot 的配置加载顺序规则

1. 格式优先级高于Profile

2. 配置加载顺序

配置方案

参数形式

使用配置文件(推荐,最清晰、最易维护)

使用Shell脚本或Batch文件(Windows批处理)

使用环境变量

最佳实践建议

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

当前目录下的 /config 子目录 ✅ 最高优先级 【推荐】

命令行参数

环境变量

如果有以下两个文件:

D:\your-app\

│ application-vipsoft.yml ← 优先级:第二

│ his-web-1.0.0.jar

└───config/

        application-vipsoft.yml ← 优先级:第一(最高)

将主要配置放在config目录下,这是最标准的位置

外层可以放一些最基础的默认配置或示例配置

利用这种覆盖特性可以实现灵活的配置管理

所以,如果您想要最高优先级的配置,请放在config目录下!

配置方案

有时候运行好多年的系统,突然要改个配置。新的程序可能会产生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 -ja

r his-web-1.0.0.jar --server.port=8090 --spring.profiles.active=vipsoft

pause

优点:

安全性高,敏感信息(如密码)不出现在命令行或配置文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛马程序员2025

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值