
文章插圖
現(xiàn)在Java Web開發(fā)一般都是用Springboot框架,部署應用時使用Jar包(Java ARchive),也就是Java歸檔文件,而不是使用War包(打包格式的Java web工程) 。
War包結構
Jar包和War包的主要區(qū)別就在于Jar包內(nèi)部已經(jīng)集成了Tomcat服務器,War包部署還需要先安裝一個Tomcat服務 。用jar部署java服務更加方便,也是大勢所趨 。在Linux服務器上部署完Jar包程序以后,該如何啟動服務和停止服務呢?
Jar包的啟動在主機上先配置好Java的環(huán)境變量,之后就可以用java命令啟動Jar包:
java -jar xxx.jar在啟動jar包的時候,通常需要設置很多與內(nèi)存有關的參數(shù),要詳細了解Java啟動內(nèi)存參數(shù),可以閱讀前文《Java面試常見問題:JVM內(nèi)存異常及內(nèi)存參數(shù)設置》 。常用的內(nèi)存配置參數(shù)包括:
-XX: MetapaceSize 設置元空間大小的初始值;-XX:MaxMetaspaceSize 設置元空間大小的最大值;-Xms 設置堆內(nèi)存的初始值;-Xmx 設置堆內(nèi)存的最大值;-Xmn 設置新生代的大??;-Xss 設置棧區(qū)的大?。?XX:SurvivorRatio 設置新生代中Eden區(qū)域和Survivor區(qū)域的比例,默認為8-XX:+UseConcMarkSweepGC 設置垃圾回收器為并發(fā)標記清除(Concurrent Mark Sweep)垃圾回收器 。這樣在Jar包的啟動命令中要把所有參數(shù)都配置好,可要寫不少字 。
java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar
為了避免每次啟動都打這么多字,我們可以把這一長串啟動命令放在Shell腳本中運行 。要啟動Jar包服務只需要運行腳本就行 。
Jar包啟動腳本Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux/Unix系統(tǒng)的橋梁,有好多種不同版本的Shell 。Ken Thompson 開發(fā)的 sh Shell是第一個 Unix Shell 。
美國計算機科學學者Kenneth Lane Thompson,1983年圖靈獎得主,C語言前身B語言的作者,Unix發(fā)明人之一
在Linux上,最常用的Shell程序就是 bash 。bash保持了對 sh Shell 的兼容性,是各種 Linux 發(fā)行版默認配置的 shell 。下面我們就看一下如何用shell腳本實現(xiàn)Jar包啟動 。
#!/bin/shAPPDIR=`pwd`PIDFILE=$APPDIR/xxxService.pidif [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE"); thenecho "xxxService is already running..."exit 1finohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar > out.file 2>&1 & echo $! > $PIDFILEecho "start xxxService success..."第一行腳本是說明shell程序所在的位置,基本上Linux系統(tǒng)都是一樣的 。
第二行腳本是用pwd指令獲取當前路徑 。通常我們把這個shell腳本和Jar包文件會放在一個路徑下,要特別注意pwd上面的不是單引號,而是鍵盤左上角的“點號” 。APPDIR就是腳本所在的當前路徑了 。
第三行腳本定義了變量PIDFILE,指向文件名xxxService.pid,這個文件就是用來記錄Jar包啟動后的進程ID 。這樣將來就可以用進程ID來關閉Jar包服務了 。
第四行腳本是判斷是否xxxService程序已經(jīng)運行了 。
[-f “$PIDFILE”]是查詢pid文件是否存在 。cat “$PIDFILE”是打印pid文件內(nèi)容,也就是進程ID 。kill -0 pid的意思并不是要殺死進程,而是讓系統(tǒng)來對進程進行檢查,如果進程不存在,kill -0會報錯 。第5行到第7行腳本的含義:如果pid文件存在且對應進程也存在,那么說明Jar包已經(jīng)啟動了,不需要再重新啟動,腳本退出運行 。
如果Jar包尚未啟動,則運行第8行腳本 。省略掉Java啟動內(nèi)存設置參數(shù),就是下面這樣:
nohup java -jar xxxService.jar > out.file 2>&1 & echo $! > $PIDFILE
以上關于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關的問題,請您及時就醫(yī)或請專業(yè)人士給予相關指導!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 講解messagebox的用法 messagebox輸出變量值
- java程序員必備的基礎知識 java截取字符串后幾位
- 六年級數(shù)學圓柱的認識專題講解 小學六年級圓柱的認識
- 哪個培訓班靠譜?想要培訓Java的應該如何選擇? 程序員編程培訓
- 自學java堅持不下去了,要找Java培訓機構嗎 程序員編程培訓
- 簡單好玩的編程代碼 javascriptvoid怎么解決
- 教你javascript實時獲取鼠標位置 js獲取鼠標點擊的位置
- 你做 Java 程序員真的是因為熱愛嗎? 程序員編程培訓
- Java基本數(shù)據(jù)類型 java字符串拆分為數(shù)組
- IIS的版本類型講解 如何查看iis版本
