優雅的啟動、停止、重啟你的SpringBoot項目


前言

你是如何啟動、關閉你的SpringBoot項目的?還是使用java -jar xxxx.jar啟動?
還在用ps -ef找到你的pid去kill你的應用嗎?
讓我們來看看還有什么更加優雅的一鍵啟動關閉的方式。

 

第一種方式

使用shell腳本,就是編寫相應的shell腳步去啟動和關閉我們的項目。
腳本內容:https://github.com/LinkinStars/springBootTemplate/blob/master/app.sh
PS:本人不是專業運維,可能shell腳本不夠規范,見諒~~

 

腳本的使用

首先,將你需要發布的jar包,和含有上述內容的腳本app.sh,上傳至linux服務器,注意兩者必須處於同一目錄,並且該目錄下只有一個jar包,並給與app.sh相應執行權限,chmod 777 app.sh

然后就可以執行腳本,命令如下

命令 作用
./app.sh start 啟動應用
./app.sh stop 關閉應用
./app.sh restart 重啟應用
./app.sh status 查看應用狀態
./app.sh stop -f 強制kill應用進程

注意,重新發布應用時,先stop再上傳jar包哦。

使用情況如圖:

 

腳本中可以修改的地方:

19行左右: nohup java -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms512M -Xmx4G -jar $appName > /dev/null 2>&1 &

這是最終jar的啟動命令,在這里你需要對gc、Xms、Xmx等針對你機器的實際情況修改,還可以添加你所需要的啟動參數等。

56行左右: for i in {3..1}

這里是設置restart的時候等待的時間,因為有的項目在3秒之內可能沒有辦法正常停止,所以可以調整為5秒,保證應用確實正常停止后再啟動

 

 

第二種方式

如果你以為這樣就足夠優雅了,那你就太天真了,如果你使用的是SpringBoot2.0及以上的版本,那就有福了,不需要腳本也可以很優雅。

如何使用

首先你修改一下打包的方式:
如果你使用gradle構建的項目,在build.gradle文件中加入以下代碼,打包時使用bootJar進行打包
bootJar {
     launchScript()
}
如果你使用maven進行構建的項目,添加下面的代碼

<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

 打出來的jar文件非常神奇,在linux系統可以直接使用./app.jar這樣類似於啟動shell腳本一般的方式啟動項目,你可以先嘗試一下是否能這樣啟動,來保證后續步驟的正常。

 

第二步添加鏈接
在服務器上運行下面的命令:
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
其中【/var/myapp/myapp.jar】為你上傳至服務器jar的絕對路徑,一定要寫全哦。
【/etc/init.d/myapp】里面的myapp可以修改為你自己想要的名稱,后面會用到。

 

第三步啟動
做完之后,你就可以使用service命令,像啟動停止服務一樣操作你的應用:

$ service myapp start
$ service myapp stop
$ service myapp status

測試效果如下:
[root@localhost ~]# service myapp start
Started [31624]
[root@localhost ~]# service myapp status
Running [31624]
[root@localhost ~]# service myapp stop
Stopped [31624]

 

其中會遇到的坑:

使用service myapp start命令后可能出現Unable to find Java.
使用ln -s /usr/local/jdk/bin/java /sbin/java命令來解決。
其中【/usr/local/jdk/bin/java】為你安裝在服務器上jdk的目錄
【/sbin/java】不需要修改
問題解決參考:https://github.com/spring-projects/spring-boot/issues/5690

 

總結

這樣之后你想停止應用,不需要再像以前一樣ps -ef找來找去了。
這對於之后的CICD,或者是docker化的你的應用等,都有一定的幫助。

參考博客:
https://segmentfault.com/a/1190000012030747
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment-install

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM