SpringBoot修改yml配置和加載順序規(guī)則的示例詳解
Spring Boot 的配置加載順序規(guī)則
Spring Boot 有非常明確的配置加載順序和優(yōu)先級規(guī)則:
1. 格式優(yōu)先級高于Profile
對于相同名稱的配置文件,文件格式的優(yōu)先級是固定的,與加載順序無關(guān):
.properties > .yml > .yaml
也就是說,如果同時存在 application-vipsoft.properties 和 application-vipsoft.yml:
application-vipsoft.properties中的配置會覆蓋application-vipsoft.yml中的相同配置- 這是由Spring Boot的設(shè)計決定的,properties文件的優(yōu)先級永遠(yuǎn)高于yml/yaml文件
2. 配置加載順序
Spring Boot 按以下順序加載配置(后面的覆蓋前面的):
- Jar包內(nèi)的
application.yml(或application.properties) - Jar包內(nèi)的
application-{profile}.yml - Jar包外(同一目錄)的
application.yml - Jar包外(同一目錄)的
application-{profile}.yml - Jar包外(同一目錄)的
application.properties - Jar包外(同一目錄)的
application-{profile}.properties← 優(yōu)先級最高 - 命令行參數(shù)
- 環(huán)境變量
配置方案
有時候運(yùn)行好多年的系統(tǒng),突然要改個配置。新的程序可能會產(chǎn)生BUG,那如何更新已有 yml 的值,有如下操作
參數(shù)形式
適合改動較少的情況
echo on REM 后續(xù)命令使用的是: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
使用配置文件(推薦,最清晰、最易維護(hù))
這是Spring Boot應(yīng)用的首選方式。將那些不常改變的參數(shù)(尤其是數(shù)據(jù)庫連接、API地址等)移動到配置文件中。
1.創(chuàng)建/修改 application-vipsoft.yml 文件
由于您已經(jīng)指定了 --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
2.簡化后的啟動命令
現(xiàn)在,啟動命令變得非常干凈,只需要關(guān)注核心的JVM參數(shù)和配置文件激活。
echo on REM 后續(xù)命令使用的是: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
優(yōu)點(diǎn):
- 命令極其簡潔,不易出錯。
- 配置與代碼分離,安全性更高(尤其是密碼)。
- 修改配置無需重新打包jar文件。
- 不同環(huán)境(如測試、生產(chǎn))可以輕松使用不同的配置文件。
使用Shell腳本或Batch文件(Windows批處理)
對于Windows,創(chuàng)建一個 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
優(yōu)點(diǎn):
- 邏輯清晰,參數(shù)被分類設(shè)置。
- 一鍵啟動,避免了每次輸入長命令。
- 易于維護(hù)和修改參數(shù)。
使用環(huán)境變量
Spring Boot可以從環(huán)境變量中讀取配置,這是一種非常云原生的做法。
1.設(shè)置環(huán)境變量(可以在批處理文件中設(shè)置,也可以在系統(tǒng)高級設(shè)置中設(shè)置)
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將大寫環(huán)境變量中的 _ 視為配置中的 .,例如 SPRING_DATASOURCE_HIS_URL 對應(yīng) spring.datasource.his.url。
2. 啟動命令
echo on REM 后續(xù)命令使用的是: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
優(yōu)點(diǎn):
- 安全性高,敏感信息(如密碼)不出現(xiàn)在命令行或配置文件中。
- 配置非常靈活,特別適合Docker、Kubernetes等容器化部署。
最佳實(shí)踐建議
- 檢查jar包內(nèi):先用解壓軟件查看jar包內(nèi)是否已有
application-vipsoft.yml - 保持一致:外部配置文件格式盡量與內(nèi)部保持一致
- 外部配置優(yōu)先:將需要修改的配置放在jar包外部的配置文件中,這樣升級jar包時配置不會丟失
- 敏感信息處理:密碼等敏感信息最好不要寫在配置文件中,而是通過環(huán)境變量或命令行參數(shù)傳入
最終建議:檢查jar包內(nèi)的配置格式,然后在外部使用相同格式的配置文件,這樣最清晰易懂。
到此這篇關(guān)于SpringBoot修改yml配置和加載順序規(guī)則的示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot修改配置加載順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea創(chuàng)建springboot項(xiàng)目,Application.java不能運(yùn)行問題及解決
這篇文章主要介紹了idea創(chuàng)建springboot項(xiàng)目,Application.java不能運(yùn)行問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Java中為什么重寫equals()也需要重寫hashCode方法
這篇文章主要介紹了Java中為什么重寫equals()也需要重寫hashCode(),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
Java在指定路徑上創(chuàng)建文件提示不存在解決方法
在本篇文章里小編給大家整理的是一篇關(guān)于Java在指定路徑上創(chuàng)建文件提示不存在解決方法,有需要的朋友們可以參考下。2020-02-02
Spring Cloud Zuul路由規(guī)則動態(tài)更新解析
這篇文章主要介紹了Spring Cloud Zuul路由規(guī)則動態(tài)更新解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
當(dāng)事務(wù)Transactional遇見異步線程出現(xiàn)的坑及解決
這篇文章主要介紹了當(dāng)事務(wù)Transactional遇見異步線程出現(xiàn)的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
Mybatis的SqlSession和一級緩存的失效原因分析及解決
這篇文章主要介紹了Mybatis的SqlSession和一級緩存的失效原因分析及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05

