springboot的打包方式有很多種。有打成war的,有打成jar的,也有直接提交到github,通過jekins進行打包部署的。這里主要介紹如何打成jar進行部署。不推薦用war,因為springboot適合前后端分離,打成jar進行部署更合適。 首先需要在application.properties當中配置端口
1.pom.xml配置
<groupId>com.web.boot</groupId>
<artifactId>demo</artifactId>
<version>0.0.1</version>
<!--默認為jar方式 -->
<packaging>jar</packaging>
<!--改為war方式 -->
<!-- <packaging>war</packaging>-->
<build>
<!-- 指定打包項目名稱 -->
<finalName>SpringBoot</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source><!-- 指定jdk版本 -->
<target>${jdk.version}</target>
<encoding>${project.build.sourceEncoding}</encoding><!-- 指定編碼版本 -->
</configuration>
</plugin>
<!--該插件的主要功能是進行項目的打包發布處理 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.4.RELEASE</version>
<configuration> <!--設置程序執行的主類,指定程序入口 -->
<mainClass>com.web.boot.ApplicationStart</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!-- repackage將jar / war 重新打包為可執行文件-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
項目右鍵 --> run as -->Maven build 出現如下界面

在Goals后面的框中輸入打包命令:
clean package clean package -D maven.test.skip=true //不執行測試用例,也不編譯測試用例類 clean package -D skipTests //不執行測試用例,但編譯測試用例類生成相應的class文件至target/test-classes下。
確認打包:run
3.此時將形成“SpringBoot.jar”程序文件,並且這個文件里面包含有全部的依賴支持庫文件。

4.將“SpringBoot.jar”文件隨意拷貝到一個路徑之中,例如:D盤,而后進入到命令行方式:java -jar SpringBoot.jar

5.執行完成之后,我們的服務就跑起來了,可以通過瀏覽器正常訪問:

http://localhost:8200/SpringBoot/testcontroller/testfile

6.Linux下發布過程,如下:
6.1 (特殊情況)查看項目端口是否被占用,格式:
netstat -tunlp | grep 端口號

可以看到 8200 端口已經被輕 java 服務占用,PID(113670)
此種情況的解決辦法有如下兩種:
@A 使用kill命令結束占用端口的進程后繼續布置項目,格式如:kill -9 PID @B 修改項目配置文件application.properties的端口配置,修改一個沒被占用的端口,重新打包部署 @C 換一台沒有占用此端口的服務器繼續部署項目
6.2 項目已經部署過了,更新了項目內容后,重新部署替代之前的版本的項目,那么一般則分為以下三個步驟:
@A 結束上一個版本的進程,不然會沖突:kill -9 $(ps -aef | grep p1upgradeTask-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}')
以下對此命令作解釋
ps -aef | grep SpringBoot.jar //查詢出我們部署的項目的信息(包含有grep本身的進程信息) 包含內容有:UID PID PPID C STIME TTY TIME CMD這幾個選項 UID:用戶ID PID:進程ID PPID:父進程ID C:CPU用於計算執行優先級的因子。數值越大,表明進程是CPU密集型運算,執行優先級會降低;數值越小,表明進程是I/O密集型運算,執行優先級會提高 STIME:進程啟動的時間 TTY:完整的終端名稱 TIME:CPU時間 CMD:完整的啟動進程所用的命令和參數 其中的grep -v grep 是干啥的呢 ? 為了去除包含grep的進程行 ,避免影響最終數據的正確性 ,因為grep本身也是一個進程。 awk是行處理器: 相比較屏幕處理的優點,在處理龐大文件時不會出現內存溢出或是處理緩慢的問題,通常用來格式化文本信息 $2:表示第二個字段 print $2 : 打印第二個字段 awk '{print $2}' : 一行一行的讀取指定的文件, 以空格作為分隔符,打印第二個字段
6.3 備份
mv SpringBoot.jar SpringBoot__`date '+%Y-%m-%dT%H-%M-%S'`.jar.backups
注意:“`” 重音符或抑音符,又稱反單引號,是西文字符中的附加符號,主要用於計算機相關領域。位置在鍵盤中數字鍵“1”的左邊,其上檔符號是“~ ”,使用Shift鍵可以換擋輸入。由於計算機顯示的原因,反單引號非常容易和單引號 ‘ 混淆。

6.4 導入新版本的jar包
mv /opt/upfile/SpringBoot.jar SpringBoot.jar
這里說明以下,我提前把打好的jar包放入了/opt/upfile/目錄下,這一步自己去做,方式有很多種,我用的“rz”命令,傳入的。

6.5 防火牆開放端口,不然項目發布,外部是訪問不到的
vi /etc/sysconfig/iptables

重啟服務:service iptables restart

測試端口是否開通:Telnet 192.168.95.4 8200
6.6 項目發布
如果不需要輸出日志,可以使用如下命令
后台無窗口發布:nohup java -jar SpringBoot.jar >/dev/null &
我們也可以手動指定一個參數來規定日志文件的輸出地點,如:
后台無窗口發布:nohup java -jar SpringBoot.jar >nohup.out 2>&1 &
上面的2 和 1 的意思如下:
0 標准輸入(一般是鍵盤)
1 標准輸出(一般是顯示屏,是用戶終端控制台)
2 標准錯誤(錯誤信息輸出)
將運行的jar 錯誤日志信息輸出到nohup.out文件中,
然后(>&1)就是繼續輸出到標准輸出(前面加的&,是為了讓系統識別是標准輸出),最后一個&,表示在后台運行。
6.7 訪問測試
http://192.168.95.4:8200/SpringBoot/testcontroller/testfile

