SpringBoot項(xiàng)目部署到服務(wù)器的兩種方式
前言
目前,前后端分離的架構(gòu)已成主流,而使用SpringBoot構(gòu)建Web應(yīng)用是非常快速的,項(xiàng)目發(fā)布到服務(wù)器上的時(shí)候,只需要打成一個(gè)jar包,然后通過(guò)命令 : java -jar jar包名稱即可啟動(dòng)服務(wù)了。
一、jar包(官方推薦)
SpringBoot項(xiàng)目默認(rèn)打包成jar包
jar包方式啟動(dòng),也就是使用SpringBoot內(nèi)置的tomcat運(yùn)行。服務(wù)器上面只要你配置了jdk1.8及以上就ok,不需要外置tomcat。
1、SpringBoot將項(xiàng)目打包成jar包
a.首先在pom.xml文件中導(dǎo)入Springboot的maven依賴
<!--將應(yīng)用打包成一個(gè)可以執(zhí)行的jar包--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
b.package一下
c.package完成以后,target中會(huì)生成一個(gè).jar包;
d.將jar包放到Linux服務(wù)器任意目錄,執(zhí)行下面的命令即可啟動(dòng)項(xiàng)目服務(wù)
$ nohup java -jar test.jar >temp.txt & //這種方法會(huì)把日志文件輸入到你指定的文件中,沒(méi)有則會(huì)自動(dòng)創(chuàng)建。進(jìn)程會(huì)在后臺(tái)運(yùn)行。
2、Linux運(yùn)行jar包與停止命令
a、執(zhí)行jar包的命令和在windows操作系統(tǒng)上是一樣的,都是java -jar xxxx.jar。
b、后臺(tái)運(yùn)行,nohup 意思是不掛斷運(yùn)行命令,當(dāng)賬戶退出或終端關(guān)閉時(shí),程序仍然運(yùn)行
當(dāng)用 nohup 命令執(zhí)行作業(yè)時(shí),缺省情況下該作業(yè)的所有輸出被重定向到nohup.out的文件中,除非另外指定了輸出文件。
nohup java -jar shareniu.jar
c、如果想殺掉運(yùn)行中的jar程序,查看進(jìn)程命令為:
ps aux|grep getCimiss-surf.jar
將會(huì)看到此jar的進(jìn)程信息
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)的部署方式:將項(xiàng)目打成war包,放入tomcat 的webapps目錄下面,啟動(dòng)tomcat,即可訪問(wèn)。
SpringBoot項(xiàng)目改造打包成war的流程
1、pom.xml配置修改
<packaging>jar</packaging> //修改為 <packaging>war</packaging>
2、pom文件添加如些依賴
<!--添加servlet-api的依賴,用來(lái)打war包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
這個(gè)依賴主要是用于在和jsp進(jìn)行整合的使用,可酌情添加
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、改造啟動(dòng)類
如果是war包發(fā)布,需要增加SpringBootServletInitializer子類,并重寫其configure方法,或者將main函數(shù)所在的類繼承SpringBootServletInitializer子類,并重寫configure方法
當(dāng)時(shí)打包為war時(shí)上傳到tomcat服務(wù)器中訪問(wèn)項(xiàng)目始終報(bào)404錯(cuò)就是忽略了這個(gè)步驟?。。?/p>
改造之前:
@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啟動(dòng)類 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)生成了,默認(rèn)是在target目錄下,位置可以在pom文件中進(jìn)行配置:
7、使用外部Tomcat運(yùn)行該 war 文件,有兩種方式。第一種把 war 文件直接丟到 tomcat的webapps目錄,啟動(dòng)tomcat;第二種使用tomcat - conf - server.xml配置,使用target目錄中war包解壓的文件夾為項(xiàng)目地址進(jìn)行部署
<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>
注意事項(xiàng):
將項(xiàng)目打成war包,部署到外部的tomcat中,這個(gè)時(shí)候,不能直接訪問(wèn)spring boot 項(xiàng)目中配置文件配置的端口。application.yml中配置的server.port配置的是spring boot內(nèi)置的tomcat的端口號(hào), 打成war包部署在獨(dú)立的tomcat上之后, 你配置的server.port是不起作用的。一定要注意這一點(diǎn)??!
其實(shí)我們從tomcat的啟動(dòng)界面,已經(jīng)可以看出,是啟動(dòng)的哪個(gè)端口:
很明顯,日志告訴我們,我們應(yīng)該訪問(wèn)8080端口。
三、jar包和war包方式對(duì)比
1.SpringBoot項(xiàng)目打包時(shí)能打成 jar 與 war包,對(duì)比兩種打包方式,jar更加簡(jiǎn)單方便,使用 java -jar xx.jar 就可以啟動(dòng)。所以打成 jar 包的最多。
而 war包可以部署到tomcat的 webapps 中,隨Tomcat的啟動(dòng)而啟動(dòng)。具體使用哪種方式,應(yīng)視應(yīng)用場(chǎng)景而定。
2、打jar包時(shí)不會(huì)把src/main/webapp 下的內(nèi)容打到j(luò)ar包里 (你認(rèn)為的打到j(luò)ar包里面,路徑是不行的會(huì)報(bào)404)
打war包時(shí)會(huì)把src/main/webapp 下的內(nèi)容打到war包里
3.打成什么文件包進(jìn)行部署與項(xiàng)目業(yè)務(wù)有關(guān),就像提供 restful API 服務(wù)的項(xiàng)目需要打包成 jar文件,用命令運(yùn)行很方便。。。而有大量css、js、html,且需要經(jīng)常改動(dòng)的項(xiàng)目,打成 war 包去運(yùn)行比較方便,因?yàn)楦膭?dòng)靜態(tài)資源可以直接覆蓋,很快看到改動(dòng)后的效果,這是 jar 包不能比的(舉個(gè)‘栗’子:項(xiàng)目打成 jar 包運(yùn)行,一段時(shí)間后,前端要對(duì)其中某幾個(gè)頁(yè)面樣式進(jìn)行改動(dòng),使其更美觀,那么改動(dòng)幾個(gè)css、html后,需要重新打成一個(gè)新的 jar 包,上傳服務(wù)器并運(yùn)行,這種改動(dòng)頻繁時(shí)很不友好,文件大時(shí)上傳服務(wù)器很耗時(shí),那么 war包就能免去這種煩惱,只要覆蓋幾個(gè)css與html即可)
以上就是SpringBoot項(xiàng)目部署到服務(wù)器的兩種方式的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot項(xiàng)目部署到服務(wù)器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 云服務(wù)器Jenkins部署Springboot項(xiàng)目及Vue項(xiàng)目的詳細(xì)過(guò)程
- IDEA如何一鍵部署SpringBoot項(xiàng)目到服務(wù)器
- Docker部署SpringBoot項(xiàng)目,本地運(yùn)行正常,部署至服務(wù)器報(bào)錯(cuò)zip file closed問(wèn)題
- 將SpringBoot項(xiàng)目無(wú)縫部署到Tomcat服務(wù)器的操作流程
- springboot項(xiàng)目如何部署到服務(wù)器
- Docker部署SpringBoot項(xiàng)目到云服務(wù)器的實(shí)現(xiàn)步驟
- Springboot項(xiàng)目的服務(wù)器部署與發(fā)布方式
相關(guān)文章
SpringCloud?Stream?整合RabbitMQ的基本步驟
這篇文章主要介紹了SpringCloud?Stream?整合RabbitMQ的基本步驟,從項(xiàng)目介紹到生產(chǎn)者結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Java實(shí)現(xiàn)迷你圖書管理系統(tǒng)案例全程
這篇文章主要為大家詳細(xì)介紹了如何利用java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-12-12SpringBoot集成Redis實(shí)現(xiàn)消息隊(duì)列的方法
這篇文章主要介紹了SpringBoot集成Redis實(shí)現(xiàn)消息隊(duì)列的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02SpringBoot調(diào)用第三方WebService接口的操作技巧(.wsdl與.asmx類型)
這篇文章主要介紹了SpringBoot調(diào)第三方WebService接口的操作代碼(.wsdl與.asmx類型 ),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Idea配置maven-tomcat-plugin插件實(shí)現(xiàn)項(xiàng)目部署
今天小編就為大家分享一篇關(guān)于Idea配置maven-tomcat-plugin插件實(shí)現(xiàn)項(xiàng)目部署,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02教你怎么使用hadoop來(lái)提取文件中的指定內(nèi)容
發(fā)現(xiàn)有很多小伙伴不會(huì)使用hadoop來(lái)提取文件中的指定內(nèi)容,今天特地整理了這篇文章,文中有非常詳細(xì)的代碼示例,對(duì)不會(huì)這個(gè)方法的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05Spring依賴注入Dependency Injection的三種方式
依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個(gè)概念。具體含義是:當(dāng)某個(gè)角色(可能是一個(gè)Java實(shí)例,調(diào)用者)需要另一個(gè)角色(另一個(gè)Java實(shí)例,被調(diào)用者)的協(xié)助時(shí),在傳統(tǒng)的程序設(shè)計(jì)過(guò)程中,通常由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例2023-02-02