網(wǎng)站首頁 編程語言 正文
需求:
最近項(xiàng)目部署,但是每個(gè)地方都有個(gè)別地方配置的差異,我們每次打包后再進(jìn)行修改極度不方便,這里將有關(guān)的配置都抽取出來,放在jar包外進(jìn)行配置,這樣以后更新時(shí)只需要將jar包更換然后重啟即可,配置讀取外部的固定配置文件。
SpringBoot 配置
springboot默認(rèn)配置的加載位置和優(yōu)先級(jí)順序
springboot啟動(dòng)時(shí)會(huì)掃描以下位置的application.properties和application.yml文件作為默認(rèn)的配置文件。
- file: ./config/
- file: ./
- classpath: /config/
- classpath: /
所有的配置文件都會(huì)被加載,但高優(yōu)先級(jí)的配置會(huì)覆蓋低優(yōu)先的配置,上面的優(yōu)先級(jí)為由高到低排列,./config/ 的優(yōu)先級(jí)最高,我們創(chuàng)建項(xiàng)目時(shí)默認(rèn)的放在resources目錄下的優(yōu)先級(jí)是最低的。 classpath可以理解為我們項(xiàng)目?jī)?nèi)部的沒打包時(shí)的resources文件夾下的,file理解為和jar包同級(jí)的目錄(如果在linux中啟動(dòng)項(xiàng)目時(shí)寫的啟動(dòng)路徑的相對(duì)位置和file的文件不是同級(jí)時(shí)外部配置文件會(huì)出現(xiàn)讀取失敗,可以翻到文章最下面)。
配置文件中帶spring.profile的文件會(huì)優(yōu)先被加載
啟動(dòng)項(xiàng)目時(shí)指定配置文件的位置
java -jar xxxx.jar -Dspring.config.location=/home/test/application.yml
啟動(dòng)時(shí)加載/home/test文件夾下的application.yml作為配置文件。這里還可以指定端口、生效的配置文件、日志打印等
java -jar xxxx.jar -Dspring.profiles.active=prod -Dspring.config.location=/home/test/application.yml
-Dserver.port=8081 > logs/xxxlog.log 2>&1 &
?
- application配置
- 非默認(rèn)配置文件,這里我是config.properties
可以通過注解_@PropertySource_ 來指定配置文件的位置,value中提供兩種方式 classpath 和 file
@Configuration
@ConfigurationProperties(prefix = "config", ignoreUnknownFields = false)
@PropertySource(name = "config.properties"
,value = {"classpath:/config.properties","file:./config/config.properties"}
,ignoreResourceNotFound = true
,encoding = "UTF-8")
value是一個(gè)數(shù)組,可以放多個(gè)配置文件,從左到右進(jìn)行加載,后面的會(huì)覆蓋掉前面的配置,ignoreResourceNotFound = true主要用來忽略文件不存在的情況,如果第一個(gè)目錄下沒有找到對(duì)應(yīng)的文件內(nèi)容,就向后繼續(xù)找不加這個(gè)配置第一個(gè)文件找不到時(shí)會(huì)報(bào)錯(cuò)。ConfigurationProperties 是用來減少下面@Value注解的參數(shù),如果不加這個(gè)注解,配置項(xiàng)中配置的是 config.username = 'liuch’
這時(shí)你的@Value("${config.maintType}")
需要寫完整,如果配置了以后@Value("${maintType}")
即可。
部署時(shí)配置讀取失敗
?
注意: 在linux啟動(dòng)項(xiàng)目時(shí),config文件夾要和啟動(dòng)根目錄的相對(duì)路徑是同一級(jí),否則讀取不到配置,需要在啟動(dòng)項(xiàng)目時(shí)指定配置文件位置。
例: 現(xiàn)在jar和config放在 /home/liuch/app/ 文件夾下,我們啟動(dòng)時(shí)需要先進(jìn)入到 /home/liuch/app 目錄,然后再nohup java -jar xxx.jar >/dev/null 2>&1 &
,直接使用命令nohup java -jar /home/liuch/app/xxx.jar >/dev/null 2>&1 &
啟動(dòng)時(shí)不會(huì)去讀取config文件夾下的配置文件,需要使用-Dspring.config.location=
指定配置文件位置,此時(shí)我們的非默認(rèn)配置文件是讀取不到的,我們可以在application.yml
文件中配置需要加載的非默認(rèn)配置文件位置,
server:
port: 8088
config:
path: /home/liuch/config.properties
@PropertySource(value = {"file:${config.path}"}, encoding="utf-8")
下面的@Value的用法和之前一樣。
?
附:springboot項(xiàng)目啟動(dòng)時(shí)的參數(shù)
/usr/local/java/jdk1.8.0_131/bin/java -jar -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/spb_zcmweb/8103/dump/heap/
-Djava.io.tmpdir=/data/liuch/tmp/
-Dserver.port=8103
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=5103
-Dcom.sun.management.jmxremote.rmi.port=6103
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.access.file=/usr/local/java/jdk1.8.0_131/jre/lib/management/jmxremote.access
-Xmx2G -Xms2G -XX:+DisableExplicitGC -verbose:gc -Xloggc:/data/liuch/log/gc.%t.log -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTaskTimeStamps -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-Dserver.connection-timeout=60000
-Dserver.tomcat.accept-count=1000
-Dserver.tomcat.max-threads=300
-Dserver.tomcat.min-spare-threads=65
-Dserver.tomcat.accesslog.enabled=false
-Dserver.tomcat.accesslog.directory=/data/liuch/log/
-Dserver.tomcat.accesslog.prefix=access_log
-Dserver.tomcat.accesslog.pattern=combine
-Dserver.tomcat.accesslog.suffix=.log
-Dserver.tomcat.accesslog.rotate=true
-Dserver.tomcat.accesslog.rename-on-rotate=true
-Dserver.tomcat.accesslog.request-attributes-enabled=true
-Dserver.tomcat.accesslog.buffered=true
-XX:NewRatio=4 -XX:SurvivorRatio=30 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=8 -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:ParallelGCThreads=24 -XX:ConcGCThreads=24 -XX:-UseGCOverheadLimit -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=1 -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark -XX:+ParallelRefProcEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=6000 -XX:CompileThreshold=10 -XX:MaxInlineSize=1024 -Dsun.net.client.defaultConnectTimeout=60000
-Dsun.net.client.defaultReadTimeout=60000
-Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300
-Djsse.enableCBCProtection=false
-Djava.security.egd=file:/dev/./urandom
-Dfile.encoding=UTF-8
-Dlog.path=/data/liuch/log/
-Dspring.profiles.active=online
/data/liuch/deploy/xxxx.jar zcmweb
原文鏈接:https://blog.csdn.net/chang100111/article/details/122191892
相關(guān)推薦
- 2022-11-09 ORACLE中常用的幾種正則表達(dá)式小結(jié)_oracle
- 2022-06-16 Golang項(xiàng)目搭配nginx部署反向代理負(fù)載均衡講解_Golang
- 2022-12-01 C/C++細(xì)數(shù)宏與函數(shù)有那些區(qū)別_C 語言
- 2023-07-08 編寫socket配置文件
- 2022-05-14 實(shí)現(xiàn)AJAX異步調(diào)用和局部刷新的基本步驟_AJAX相關(guān)
- 2023-04-07 C語言中循環(huán)嵌套的應(yīng)用方式_C 語言
- 2022-06-10 FreeRTOS進(jìn)階系統(tǒng)節(jié)拍時(shí)鐘示例的完全解析_操作系統(tǒng)
- 2022-07-13 File類的基本運(yùn)用、查找、刪除
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支