SpringBoot項目部署到服務器的兩種方式
前言
目前,前后端分離的架構已成主流,而使用SpringBoot構建Web應用是非??焖俚?,項目發(fā)布到服務器上的時候,只需要打成一個jar包,然后通過命令 : java -jar jar包名稱即可啟動服務了。
一、jar包(官方推薦)
SpringBoot項目默認打包成jar包

jar包方式啟動,也就是使用SpringBoot內(nèi)置的tomcat運行。服務器上面只要你配置了jdk1.8及以上就ok,不需要外置tomcat。
1、SpringBoot將項目打包成jar包
a.首先在pom.xml文件中導入Springboot的maven依賴
<!--將應用打包成一個可以執(zhí)行的jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>b.package一下

c.package完成以后,target中會生成一個.jar包;

d.將jar包放到Linux服務器任意目錄,執(zhí)行下面的命令即可啟動項目服務
$ nohup java -jar test.jar >temp.txt & //這種方法會把日志文件輸入到你指定的文件中,沒有則會自動創(chuàng)建。進程會在后臺運行。
2、Linux運行jar包與停止命令
a、執(zhí)行jar包的命令和在windows操作系統(tǒng)上是一樣的,都是java -jar xxxx.jar。
b、后臺運行,nohup 意思是不掛斷運行命令,當賬戶退出或終端關閉時,程序仍然運行
當用 nohup 命令執(zhí)行作業(yè)時,缺省情況下該作業(yè)的所有輸出被重定向到nohup.out的文件中,除非另外指定了輸出文件。
nohup java -jar shareniu.jar
c、如果想殺掉運行中的jar程序,查看進程命令為:
ps aux|grep getCimiss-surf.jar
將會看到此jar的進程信息
data 5796 0.0 0.0 112656 996 pts/1 S+ 09:11 0:00 grep --color=auto getCimiss-surf.jar data 30768 6.3 0.4 35468508 576800 ? Sl 09:09 0:08 java -jar getCimiss-surf.jar
其中30768則為此jar的pid,殺掉命令為
kill -9 30768
二、war包
傳統(tǒng)的部署方式:將項目打成war包,放入tomcat 的webapps目錄下面,啟動tomcat,即可訪問。
SpringBoot項目改造打包成war的流程
1、pom.xml配置修改
<packaging>jar</packaging> //修改為 <packaging>war</packaging>
2、pom文件添加如些依賴
<!--添加servlet-api的依賴,用來打war包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>這個依賴主要是用于在和jsp進行整合的使用,可酌情添加
3、排除springboot內(nèi)置的tomcat干擾
<!--最終打成war包,排除內(nèi)置的tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>4、改造啟動類
如果是war包發(fā)布,需要增加SpringBootServletInitializer子類,并重寫其configure方法,或者將main函數(shù)所在的類繼承SpringBootServletInitializer子類,并重寫configure方法
當時打包為war時上傳到tomcat服務器中訪問項目始終報404錯就是忽略了這個步驟!??!
改造之前:
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
SpringApplication.run(MainApp.class,args);
}
}
改造之后:
@SpringBootApplication
public class MainApp extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MainApp.class,args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意這里要指向原先用main方法執(zhí)行的Application啟動類
return builder.sources(MainApp.class);
}
}這種改造方式也是官方比較推薦的方法
5、pom文件中不要忘了maven編譯插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>6、在IDEA中使用mvn clean命令清除舊的包,并使用mvn package生成新的war包

執(zhí)行完畢后,可以看到war包已經(jīng)生成了,默認是在target目錄下,位置可以在pom文件中進行配置:

7、使用外部Tomcat運行該 war 文件,有兩種方式。第一種把 war 文件直接丟到 tomcat的webapps目錄,啟動tomcat;第二種使用tomcat - conf - server.xml配置,使用target目錄中war包解壓的文件夾為項目地址進行部署
<Service name="testWar">
<Connector port="8088" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="true" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8"/>
<Engine name="hnswzy" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" reloadable="true" docBase="D:\project\springboot\war\target\war-0.0.1">
</Context>
</Host>
</Engine>
</Service>注意事項:
將項目打成war包,部署到外部的tomcat中,這個時候,不能直接訪問spring boot 項目中配置文件配置的端口。application.yml中配置的server.port配置的是spring boot內(nèi)置的tomcat的端口號, 打成war包部署在獨立的tomcat上之后, 你配置的server.port是不起作用的。一定要注意這一點??!
其實我們從tomcat的啟動界面,已經(jīng)可以看出,是啟動的哪個端口:

很明顯,日志告訴我們,我們應該訪問8080端口。
三、jar包和war包方式對比
1.SpringBoot項目打包時能打成 jar 與 war包,對比兩種打包方式,jar更加簡單方便,使用 java -jar xx.jar 就可以啟動。所以打成 jar 包的最多。
而 war包可以部署到tomcat的 webapps 中,隨Tomcat的啟動而啟動。具體使用哪種方式,應視應用場景而定。
2、打jar包時不會把src/main/webapp 下的內(nèi)容打到jar包里 (你認為的打到jar包里面,路徑是不行的會報404)
打war包時會把src/main/webapp 下的內(nèi)容打到war包里
3.打成什么文件包進行部署與項目業(yè)務有關,就像提供 restful API 服務的項目需要打包成 jar文件,用命令運行很方便。。。而有大量css、js、html,且需要經(jīng)常改動的項目,打成 war 包去運行比較方便,因為改動靜態(tài)資源可以直接覆蓋,很快看到改動后的效果,這是 jar 包不能比的(舉個‘栗’子:項目打成 jar 包運行,一段時間后,前端要對其中某幾個頁面樣式進行改動,使其更美觀,那么改動幾個css、html后,需要重新打成一個新的 jar 包,上傳服務器并運行,這種改動頻繁時很不友好,文件大時上傳服務器很耗時,那么 war包就能免去這種煩惱,只要覆蓋幾個css與html即可)
以上就是SpringBoot項目部署到服務器的兩種方式的詳細內(nèi)容,更多關于SpringBoot項目部署到服務器的資料請關注腳本之家其它相關文章!
相關文章
SpringCloud?Stream?整合RabbitMQ的基本步驟
這篇文章主要介紹了SpringCloud?Stream?整合RabbitMQ的基本步驟,從項目介紹到生產(chǎn)者結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03
Java實現(xiàn)迷你圖書管理系統(tǒng)案例全程
這篇文章主要為大家詳細介紹了如何利用java語言實現(xiàn)簡單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-12-12
SpringBoot集成Redis實現(xiàn)消息隊列的方法
這篇文章主要介紹了SpringBoot集成Redis實現(xiàn)消息隊列的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
SpringBoot調(diào)用第三方WebService接口的操作技巧(.wsdl與.asmx類型)
這篇文章主要介紹了SpringBoot調(diào)第三方WebService接口的操作代碼(.wsdl與.asmx類型 ),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
Idea配置maven-tomcat-plugin插件實現(xiàn)項目部署
今天小編就為大家分享一篇關于Idea配置maven-tomcat-plugin插件實現(xiàn)項目部署,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
Spring依賴注入Dependency Injection的三種方式
依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。具體含義是:當某個角色(可能是一個Java實例,調(diào)用者)需要另一個角色(另一個Java實例,被調(diào)用者)的協(xié)助時,在傳統(tǒng)的程序設計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例2023-02-02

