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終於被解放了。