首先聲明,這個自動部署,只是把配置文件單獨放在服務器上進行配置,修改了配置文件,仍然需要重啟!只是減少了不必重新打包這一步!
腳本見附件。
1.總結腳本原理
執行腳本->獲取同級目錄下的包->讀取包的信息->判斷是否在運行->在運行的殺掉->執行啟動命令,並指定配置文件路徑->打印執行是否成功
2.SpringBoot加載外部文件原理
1)SpringBoot從application.properties或者application.yml讀取配置.
2)SpringApplication會默認將命令行選項參數轉換為配置信息.
3)從命令行指定配置項的優先級最高(可以通過setAddCommandLineProperties來禁用).
3.總結優點
1)修改了配置文件信息(例,修改數據庫密碼)需在服務器的配置文件上修改,重啟服務,無需重新打包。
2)給測試、UAT等多個環境發版,只需打一次包。無需每個環境改一次變量重新打包。
3)可復用,腳本中只配置了操作同級目錄的jar或war,不包含任何項目信息。
4.腳本詳細介紹
if [ -e *.jar -o -e *.war ];then 判斷是否存在jar包或war包,-e:做判斷,-0:或者。
SERVER_JAR=ls -l |awk '{print $9}'| grep .jar$
讀取jar包信息,並把第9行信息(jar名字)賦值給server_jar變量。
pid=$(ps -ef | grep $SERVER_JAR | grep -v grep | awk '{print $2}') 獲取jar包的進程號(第2行信息),賦值給pid變量。grep -v grep:排除當前命令的進程號。
if ps -p $pid> /dev/null 判斷進程是否在運行。> /dev/null:把返回信息扔進黑洞。
kill -9 ${pid} 干掉進程。
nohup java $JAVA_OPTS -jar $SERVER_JAR --spring.config.location=./application.yml >/dev/null 2>&1 & 啟動jar包,並指定配置文件地址。
if [[ $? -ne 0 ]]; then 判斷上一步命令是否正常執行,正常返回0,不正常返回不等於0的數字(一般是1)。ne:不等於。
exit 1 返回不等於1的,告訴系統執行異常了。
附件:start.sh