1. 程式人生 > >優雅的啟動、停止、重啟你的SpringBoot專案

優雅的啟動、停止、重啟你的SpringBoot專案

前言

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

第一種方式

指令碼的使用

首先,將你需要釋出的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

測試效果如下: [[email protected] ~]# service myapp start Started [31624] [[email protected] ~]# service myapp status Running [31624] [[email protected] ~]# 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化的你的應用等,都有一定的幫助。