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

個人公衆號:404Code,分享半個互聯網人的技術與思考,感興趣的可以關注.
404Code

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章