Spring Boot jar 啟動時設置環境參數的操作
Spring Boot jar 啟動時設置環境參數
1 摘要
通常在使用 Spring Boot 開發項目時需要設置多環境(測試環境與生產環境等),但是項目打包卻隻能指定一種環境,有沒有一種辦法,能夠隻打一個 jar 包,但是啟動的時候指定項目環境?作者經過在網上查閱資料並測試,發現這一功能可以實現,這就大大方便瞭項目的部署工作(可以實現多環境自動部署)。
2 核心代碼
2.1 spring Boot 多環境配置
../demo-web/src/main/resources/application.yml
## spring config spring: # environment: dev|test|pro profiles: active: dev
2.2 spring Boot 項目啟動命令
Linux 命令行後臺啟動 spring boot jar:
nohup java -jar xxx.jar --spring.profiles.active=test > /dev/null 2>&1 &
根據不同的部署環境修改 –spring.profiles.active 值即可
3 Spring boot 簡易啟動與停止 shell 腳本
3.1 啟動腳本
../doc/script/start-springboot.sh
#!/bin/sh # # 啟動 jar 運行 # 項目部署目錄 projectDir=/opt/springboot/ # 項目運行 jar 名稱 jarName="springbootdemo.jar" # 腳本日志目錄 logDir=/var/log/springbootdemo/ # 項目部署環境 profileActive=dev # 這裡的-x 參數判斷${logDir}是否存在並且是否具有可執行權限 if [ ! -x "${logDir}" ]; then mkdir -p "${logDir}" fi # 判斷項目SpringBoot程序是否運行 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} 程序運行正常 !!! !!!" >> ${logDir}$(date "+%Y-%m-%d").log fi
3.2 停止腳本
../doc/script/stop-springboot.sh
#!/bin/sh # # 停止 jar 運行 # 項目部署目錄 projectDir="/opt/springboot/" # 項目運行 jar 名稱 jarName="springbootdemo.jar" # 腳本名稱 scriptName="stop-springboot.sh" # 判斷項目SpringBoot程序是否運行 count=$(ps -ef |grep ${jarName} |grep -v "grep" |wc -l) if [ ${count} -gt 0 ]; then echo "已經存在 ${count} 個${jarName} 程序在運行" # 獲取正在運行的程序進程 id(排除 grep 本身、awk 命令以及腳本本身) jarPid=$(ps x | grep ${jarName} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}') # 停止正在運行的項目進程 kill -9 ${jarPid} output=`echo "正在關閉${jarName}程序,進程id: ${jarPid}"` echo ${output} else echo '沒有對應的程序在運行' fi # 刪除 jar 包 rm -rf ${projectDir}${jarName} # 進入 項目部署目錄 cd ${projectDir}
3.3 監控 Spring Boot 項目
生產環境中如果因為各種原因從而導致項目停止運行,則此時服務器便不能對外提供服務,為瞭保證服務能夠在無人值守的時間段內持續提供服務,實現項目的自動 修復/重啟 顯得尤為重要。在這裡,使用一種簡單粗暴的方式,項目掛掉,直接重啟,通過使用定時任務執行啟動腳本即可。
定時任務 crontab 簡單使用,以 centOS 7 為例:
開機啟動定時任務服務
systemctl enable cornd
啟動定時任務
systemctl start cornd
關閉定時任務服務
systemctl stop crond
添加、編輯定時任務
crontab -e
內容如下:
00,10,20,30,40,50 * * * * /root/script/start-xxx.sh
當前定時任務意思為每 10 分鐘執行一次同步腳本
cron 表達式說明:
* * * * * 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/
註意事項 : */5 * * * * 表示每 5 分鐘執行一次,但是可能會在部分系統中不執行
4 Github 源碼
Gtihub 源碼地址 : https://github.com/Flying9001/springBootDemo
springboot項目啟動參數詳解
本文介紹springboot項目啟動時增加啟動參數的多種方式,我們都知道Spring在註入屬性時可以通過@Value註解註入屬性,那麼@Value可以讀取的范圍有哪些呢?這就是本文的主要內容。
以下幾種方式都可以被@Value讀取到
1、java -jar -Dserver.port=8888 -Xms1024m demo.jar
這種方式增加的參數是被設置到應用的系統屬性中,可以使用System.getProperty(“server.port”)獲取(可以在idea的idea VM options中配置,以空格分隔)
-D(defintion)表示自定義參數
2、java -jar demo.jar –server.port=8888
這種方式增加的參數是屬於命令行參數,即會從springboot啟動時的main方法的String[] args中作為參數傳入(可以在idea的program arguments中配置,以空格分隔)
3、從操作系統的環境變量中讀取
這種方式的參數即屬於操作系統方面的,比如安裝jdk時設置的環境變量,定義JAVA_HOME,也可以通過System.getenv(“JAVA_HOME”)獲取,(可以在idea的VM Environment variables中配置,以;分隔)
4、通過項目中配置文件bootstrap/application文件載入
這種方式是在項目中配置的方式,比較常見
以上就是常見的多種方式介紹
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Spring Boot 啟動、停止、重啟、狀態腳本
- Spring Boot Jar 包部署腳本的實例講解
- shell腳本配合zabbix實現tomcat的故障自愈功能
- Springboot多環境開發及使用方法
- java springboot的概述、特點與構建介紹