Spring Boot jar 啟動時設(shè)置環(huán)境參數(shù)的操作
Spring Boot jar 啟動時設(shè)置環(huán)境參數(shù)
1 摘要
通常在使用 Spring Boot 開發(fā)項(xiàng)目時需要設(shè)置多環(huán)境(測試環(huán)境與生產(chǎn)環(huán)境等),但是項(xiàng)目打包卻只能指定一種環(huán)境,有沒有一種辦法,能夠只打一個 jar 包,但是啟動的時候指定項(xiàng)目環(huán)境?作者經(jīng)過在網(wǎng)上查閱資料并測試,發(fā)現(xiàn)這一功能可以實(shí)現(xiàn),這就大大方便了項(xiàng)目的部署工作(可以實(shí)現(xiàn)多環(huán)境自動部署)。
2 核心代碼
2.1 spring Boot 多環(huán)境配置
../demo-web/src/main/resources/application.yml
## spring config spring: # environment: dev|test|pro profiles: active: dev
2.2 spring Boot 項(xiàng)目啟動命令
Linux 命令行后臺啟動 spring boot jar:
nohup java -jar xxx.jar --spring.profiles.active=test > /dev/null 2>&1 &
根據(jù)不同的部署環(huán)境修改 --spring.profiles.active 值即可
3 Spring boot 簡易啟動與停止 shell 腳本
3.1 啟動腳本
../doc/script/start-springboot.sh
#!/bin/sh # # 啟動 jar 運(yùn)行 # 項(xiàng)目部署目錄 projectDir=/opt/springboot/ # 項(xiàng)目運(yùn)行 jar 名稱 jarName="springbootdemo.jar" # 腳本日志目錄 logDir=/var/log/springbootdemo/ # 項(xiàng)目部署環(huán)境 profileActive=dev # 這里的-x 參數(shù)判斷${logDir}是否存在并且是否具有可執(zhí)行權(quán)限 if [ ! -x "${logDir}" ]; then mkdir -p "${logDir}" fi # 判斷項(xiàng)目SpringBoot程序是否運(yùn)行 count=$(ps -ef |grep ${jarName} |grep -v "grep" |wc -l) if [ ${count} -lt 1 ]; then cd ${projectDir} nohup java -jar ${jarName} --spring.profiles.active=${profileActive} > /dev/null 2>&1 & echo "$(date '+%Y-%m-%d %H:%M:%S') 啟動 ${jarName} 程序 ... ..." >> ${logDir}$(date "+%Y-%m-%d").log else echo "$(date '+%Y-%m-%d %H:%M:%S') ${jarName} 程序運(yùn)行正常 !!! !!!" >> ${logDir}$(date "+%Y-%m-%d").log fi
3.2 停止腳本
../doc/script/stop-springboot.sh
#!/bin/sh # # 停止 jar 運(yùn)行 # 項(xiàng)目部署目錄 projectDir="/opt/springboot/" # 項(xiàng)目運(yùn)行 jar 名稱 jarName="springbootdemo.jar" # 腳本名稱 scriptName="stop-springboot.sh" # 判斷項(xiàng)目SpringBoot程序是否運(yùn)行 count=$(ps -ef |grep ${jarName} |grep -v "grep" |wc -l) if [ ${count} -gt 0 ]; then echo "已經(jīng)存在 ${count} 個${jarName} 程序在運(yùn)行" # 獲取正在運(yùn)行的程序進(jìn)程 id(排除 grep 本身、awk 命令以及腳本本身) jarPid=$(ps x | grep ${jarName} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}') # 停止正在運(yùn)行的項(xiàng)目進(jìn)程 kill -9 ${jarPid} output=`echo "正在關(guān)閉${jarName}程序,進(jìn)程id: ${jarPid}"` echo ${output} else echo '沒有對應(yīng)的程序在運(yùn)行' fi # 刪除 jar 包 rm -rf ${projectDir}${jarName} # 進(jìn)入 項(xiàng)目部署目錄 cd ${projectDir}
3.3 監(jiān)控 Spring Boot 項(xiàng)目
生產(chǎn)環(huán)境中如果因?yàn)楦鞣N原因從而導(dǎo)致項(xiàng)目停止運(yùn)行,則此時服務(wù)器便不能對外提供服務(wù),為了保證服務(wù)能夠在無人值守的時間段內(nèi)持續(xù)提供服務(wù),實(shí)現(xiàn)項(xiàng)目的自動 修復(fù)/重啟 顯得尤為重要。在這里,使用一種簡單粗暴的方式,項(xiàng)目掛掉,直接重啟,通過使用定時任務(wù)執(zhí)行啟動腳本即可。
定時任務(wù) crontab 簡單使用,以 centOS 7 為例:
開機(jī)啟動定時任務(wù)服務(wù)
systemctl enable cornd
啟動定時任務(wù)
systemctl start cornd
關(guān)閉定時任務(wù)服務(wù)
systemctl stop crond
添加、編輯定時任務(wù)
crontab -e
內(nèi)容如下:
00,10,20,30,40,50 * * * * /root/script/start-xxx.sh
當(dāng)前定時任務(wù)意思為每 10 分鐘執(zhí)行一次同步腳本
cron 表達(dá)式說明:
* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)
在線生成 cron : http://cron.qqe2.com/
注意事項(xiàng) : */5 * * * * 表示每 5 分鐘執(zhí)行一次,但是可能會在部分系統(tǒng)中不執(zhí)行
4 Github 源碼
Gtihub 源碼地址 : https://github.com/Flying9001/springBootDemo
springboot項(xiàng)目啟動參數(shù)詳解
本文介紹springboot項(xiàng)目啟動時增加啟動參數(shù)的多種方式,我們都知道Spring在注入屬性時可以通過@Value注解注入屬性,那么@Value可以讀取的范圍有哪些呢?這就是本文的主要內(nèi)容。
以下幾種方式都可以被@Value讀取到
1、java -jar -Dserver.port=8888 -Xms1024m demo.jar
這種方式增加的參數(shù)是被設(shè)置到應(yīng)用的系統(tǒng)屬性中,可以使用System.getProperty(“server.port”)獲取(可以在idea的idea VM options中配置,以空格分隔)
-D(defintion)表示自定義參數(shù)
2、java -jar demo.jar --server.port=8888
這種方式增加的參數(shù)是屬于命令行參數(shù),即會從springboot啟動時的main方法的String[] args中作為參數(shù)傳入(可以在idea的program arguments中配置,以空格分隔)
3、從操作系統(tǒng)的環(huán)境變量中讀取
這種方式的參數(shù)即屬于操作系統(tǒng)方面的,比如安裝jdk時設(shè)置的環(huán)境變量,定義JAVA_HOME,也可以通過System.getenv(“JAVA_HOME”)獲取,(可以在idea的VM Environment variables中配置,以;分隔)
4、通過項(xiàng)目中配置文件bootstrap/application文件載入
這種方式是在項(xiàng)目中配置的方式,比較常見
以上就是常見的多種方式介紹
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java web實(shí)現(xiàn)網(wǎng)上手機(jī)銷售系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)網(wǎng)上手機(jī)銷售系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08解決myBatis generator逆向生成沒有根據(jù)主鍵的select,update和delete問題
這篇文章主要介紹了解決myBatis generator逆向生成沒有根據(jù)主鍵的select,update和delete問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09JVM自定義類加載器在代碼擴(kuò)展性實(shí)踐分享
這篇文章主要介紹了JVM自定義類加載器在代碼擴(kuò)展性實(shí)踐分享,一個類型從被加載到虛擬機(jī)內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個生命周期將會經(jīng)歷加載、驗(yàn)證、準(zhǔn)備、解析、初始化 、使用和卸載七個階段,其中驗(yàn)證、準(zhǔn)備、解析三個部分統(tǒng)稱為連接2022-06-06基于SpringBoot實(shí)現(xiàn)圖片上傳及圖片回顯
本篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)圖片上傳及圖片回顯,文中通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-08-08Java中為什么this可以調(diào)用當(dāng)前實(shí)例
本文主要介紹了為什么可以通過this關(guān)鍵字訪問到當(dāng)前對象呢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07SpringBoot日程管理Quartz與定時任務(wù)Task實(shí)現(xiàn)詳解
定時任務(wù)是企業(yè)級開發(fā)中必不可少的組成部分,諸如長周期業(yè)務(wù)數(shù)據(jù)的計(jì)算,例如年度報(bào)表,諸如系統(tǒng)臟數(shù)據(jù)的處理,再比如系統(tǒng)性能監(jiān)控報(bào)告,還有搶購類活動的商品上架,這些都離不開定時任務(wù)。本節(jié)將介紹兩種不同的定時任務(wù)技術(shù)2022-09-09java實(shí)現(xiàn)memcache服務(wù)器的示例代碼
本篇文章主要介紹了java實(shí)現(xiàn)memcache服務(wù)器的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04