「SpringBoot」如何優雅地啓動SpringBoot項目

本文主要講述一下如何優雅地管理SpringBoot項目。

背景

課堂上,當小明形如流水地回答完沐芳老師提出來的問題時,卻被至今沒有對象的胖虎無情嘲諷了?

沐芳老師:小明,你平時是如何啓動、停止你的SpringBoot項目的?

小明(自信滿滿):啓動時使用java -jar xxxx.jar命令啓動,停止服務時,使用ps -ef找到服務的pid,然後再kill掉停止。

胖虎:就這?

這讓小明很有挫敗感,原計劃按時放學回去陪隔壁小花打王者榮耀的小明,毅然決然留在教室潛心研究一番到底什麼是SpringBoot優雅啓動的正確姿勢?經過幾番挫折,小明終於蒐集整理出兩種優雅啓動SpringBoot項目的方式分享給小明的小夥伴們。

第一種方式:使用SHELL腳本

As we known 作爲一個後端程序猿,每天的工作除了與前端妹子一塊連調接口(拌幾嘴)以外,就是終日沉浸在黑壓壓的Linux服務器之中,部署服務、監控服務器狀態、分析日誌(找bug)……因此,掌握一些常用的SHEEL腳本命令是自然而然地(迫不得已)。

大膽胡說:什麼是SHELL腳本?故名思議,她樂了(她樂你也樂)。

因此,小明站在巨人的肩膀上,參考了一些圈內資深高級JAVA開發工程師的經驗,整理了一份防嘲諷必備的SHELL腳本(Github地址見文末),只是爲了自己的SpringBoot服務,只是爲了不被單身的胖虎嘲諷。

這一份SHELL腳本很神奇,有多神奇呢?

你只要把這個腳本放到你的SpringBoot項目打好的jar包同級目錄下:

在該目錄下,簡單粗暴地執行下面這個命令,賦予該腳本相應執行權限

chmod 777 app.sh

就能完成如下功能:

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

注意:如果一個目錄下有多個jar包我們執行一個文件,那就需要指定jar包,比如./app.sh start coder-xiaoming-0.0.1-SNAPSHOT.jar

驚不驚喜?讓大家看一下小明實操預覽圖,過過眼癮先。

我們可以看到,通過運行啓動命令,控制檯輸出提示:正在啓動……並且該目錄下會根據jar包名稱和日期輸出一個日誌文件(調試bug使用)。

爲了走一個流程,我們再查看一下應用狀態,並停止應用

篇幅有限,其他幾個命令大家可以自己嘗試一下。

當然,我們還可以嘗試自定義腳本中的內容:

比如,gcXmsXmx等針對當前服務器的實際配置進行修改;

不同大小的項目,正常停止項目的時間也不同,因此我們還可以設置restart應用時的等待時間,確保應用正常停止後再啓動,如下所示將等待時間設爲5s。

for i in {5..1}
do
	echo -n "$i "
  sleep 1
done

是不是感覺已經很規範很優雅了?但,故事還要繼續,遠沒有完,小明又繼續探索下去,發現如果你使用的是SpringBoot 2.0及以上的版本,那小明的小夥伴們便有福了,不需要以上的腳本就可以很優雅。接下來,看一下第二種方式。

第二種方式:把SpringBoot以服務形式啓動

英文名字:Spring Boot Application as a Service Deploying .

擱在平時,小明在Linux服務器上啓動Springboot項目,都是通過nohup命令讓程序作爲後臺進程執行的,但是這樣,程序並不好管理維護,反而顯得小明和小明的夥伴們都很不專業,更好的方法是將SpringBoot作爲Service啓動。

首先需要更改打包方式,如果你使用的是maven構建的SpringBoot項目,首先將SpringBoot項目中的pom.xml中增加一個plugin

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

其中“true”一定要加,標示該jar爲可執行,否則機器啓動SpringBoot服務會報錯。

如果你使用的是gradle構建的SpringBoot項目,則相應地需要增加如下配置

bootJar {
     launchScript()
}

接下來拿主要拿maven打包舉例:

首先通過package命令打jar包:

mvn clean package

接着,我們需要在Linux服務器上,如下所示,增加一個軟連接,就可以將應用註冊到Service

sudo ln -s /opt/coder-xiaoming.jar /etc/init.d/coder-xiaoming

其中/opt/coder-xiaoming.jar爲你上傳至服務器jar的絕對路徑,一定要寫全哦。
/etc/init.d/coder-xiaoming裏面的coder-xiaoming可以修改爲你自己中意的名字,執行相關命令時會用到。

接下來,就是見證奇蹟的時刻,我們通過如下命令來操作應用(和操作湯姆貓一樣):

啓動服務

sudo service coder-xiaoming start

停止服務

sudo service coder-xiaoming stop

查看服務狀態

sudo service coder-xiaoming status

有些小夥伴可能注意到了,這樣快捷操作省去很多配置,固然很方便,那啓動服務時如何自定義參數呢?接着往下看。

自定義JVM參數

我們只需在jar包所在的同級目錄下添加與jar包同名的配置文件,比如添加一個叫coder-xiaoming.conf的配置文件(名字要和jar的名字相同哦),然後在文件裏面自定義JVM參數JAVA_OPTS

export JAVA_OPTS="-Xmx4096m -Xms4096m"

這樣啓動時,就會讀取該文件中的配置,我們查看一下進程狀態

ps -ef | grep java

你一定可以看到,對應的Java進程啓動參數上會多了“-Xmx4096m -Xms4096m”,如果要增加其他啓動參數配置同理哈。

總結

自從小明掌握以上兩個騷操作之後,在日常開發中也可以目中無人地啓動/停止SpringBoot應用,極大地提高了日常工作效率,這讓身旁的胖虎也呆若木雞。這樣操作的意義很大,以當前眼光來看,小明可以多陪小花打幾把王者榮耀;以長遠來看,這對於之後的CICD或者Docker化應用都有很大的幫助。小明的小夥伴們,你們還不趕緊應用起來?保證今晚不加班~

sheel腳本Github地址:https://github.com/WhenCoding/coder-xiaoming/blob/master/deploy/app.sh

搜索微信公衆號“程序員小明”,獲取更多精彩。

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