宗和玉
2025-9-28 18:15:01
目录
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 -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包内的配置格式,然后在外部使用相同格式 的配置文件,这样最清晰易懂。
``
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
相关推荐