1. 程式人生 > >SpringBoot打包jar包並後臺執行

SpringBoot打包jar包並後臺執行

最近又進步了。我一直習慣直接在Intellij Idea中直接執行寫好的程式,不過也是因為僅僅是寫個模擬介面而已。後來到新公司要負責java後臺,開始習慣把專案部署到外部Tomcat去測試,或者打成war包讓運維去linux上面部署。不過,想來這也是因為只是在做一個目前看起來並不是很重要的專案而已。如果同時做的專案多了,好像自己的做法就不好了。

老大最近點醒了我,原來SpringBoot是可以打包成jar包,而不依賴容器就可以執行的。我立即進行了研究和嘗試,分別在win7和ubuntu上面進行了測試,終於達到效果。

一、首先,必須做好一個執行流暢沒有毛病的專案。

二、修改pom檔案的開頭部分:


packaging本來就是jar,我的專案因為不明白這個作用被我改成war了。

三、在application.properties中加入server.port=9090,埠號自己要改一下,別和其他的衝突,建議有文案設定,給一個專案規定一個埠號。因為jar包部署之後是一個專案獨佔一個容器。呼叫的時候專案名被隱藏了。

四、在Idea下方的Terminal或者命令列定位到專案資料夾,執行:mvn clean package命令。

有資料說clean前面有個-,結果大半天我沒弄出來。後來回家研究發現老提"lean"出錯,於是我就寫成mvn -cclean package執行,結果還成了。網上很多資料是沒有-的。

前提是要另外安裝maven。

提示一下,這裡最容易出錯:

1.網上很多資料在解釋這裡的問題的時候都去修改pom,加了很多什麼東西。後來發現根本不需要,容易出現包不能下載的error,不僅如此,pom中有些提示出錯的包還要刪去。命令列後面加-e可以列印異常提示。

2.我在專案中寫了單元測試,有三個方法,其中有一個方法執行會出錯,平時用war部署發現不了問題,打jar包好像一個個都要執行一遍,結果我的一個單元測試方法出問題就不能打包成功,刪除就好了。


可以看到jar包的位置在target資料夾下面。

五、部署

win7和linux是一樣的。把jar包上傳到linux,規劃一個資料夾。將命令列定位到該資料夾下,執行命令(win7和linux一樣):

java -jar yuedaoapi-1.0.0.jar

就這樣,jar包就部署好了。試著呼叫一下,沒有任何問題。

不過如果要在後臺呼叫,需要執行:

java -jar yuedaoapi-1.0.0.jar > log_yuedaoapi.file 2>&1 &


這個方法在linux沒有問題,在win7中沒有成功。命令列視窗關閉服務就終止了。

如果要關掉後臺執行的服務,釋放被佔用的埠。就要記住執行成功後給出的程序pid,比如上面圖中的2637

用kill -9 2637就可以殺死。

如果不小心忘記了記錄這個pid,可以用以下兩種方式都可以找到程序,看到pid

netstat -ap|grep 9090

lsof -i:9090


這時候再kill就好了。

看一下呼叫效果:


看得出來效果不錯,專案名稱被隱藏了。我的Idea終於被解放了。