打包方式有jar包和war包
1. jar包(推薦)
jar包方式啟動(dòng)妇押,也就是使用SpringBoot內(nèi)置的tomcat運(yùn)行曲尸。服務(wù)器上面只要你配置了
jdk1.8及以上就ok,不需要外置tomcat。
SpringBoot將項(xiàng)目打包成jar包
<!--將應(yīng)用打包成一個(gè)可以執(zhí)行的jar包-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
執(zhí)行package
target中會(huì)生成一個(gè).jar包
將jar包上傳到Linux服務(wù)器上葡公,以jar運(yùn)行
java -jar spring-boot-mytest-0.0.1-SNAPSHOT.jar
2.war包(傳統(tǒng)的部署方式:將項(xiàng)目打成war包,放入tomcat 的webapps目錄下面条霜,啟動(dòng)tomcat催什,即可訪問(wèn)。)
pom.xml配置修改
<packaging>jar</packaging>
//修改為
<packaging>war</packaging>
pom文件添加如些依賴
<!--最終打成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>
改造啟動(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è)步驟!t锘小灵巧!
改造前
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
SpringApplication.run(MainApp.class,args);
}
}
改造后
@SpringBootApplication
public class SpringBootMytestApplication extends
SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringBootMytestApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder
builder) {
// 注意這里要指向原先用main方法執(zhí)行的Application啟動(dòng)類
return builder.sources(SpringBootMytestApplication.class);
}
package,可以看到變成了war包
使用外部Tomcat運(yùn)行該 war 文件(把 war 文件直接丟到 tomcat的webapps目錄抹沪,啟動(dòng)tomcat)
注意:
將項(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是不起作用的
3.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)虏肾,就像提供 rest 服務(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即可)
4 多環(huán)境部署
@profile 注解的作用是指定類或方法在特定的 Profile 環(huán)境生效墩弯,任何 @Component 或 @Configuration 注解的類都可以使用 @Profile 注解。在使用DI來(lái)依賴注入的時(shí)候蟀淮,能夠根據(jù)@profile 標(biāo)明的環(huán)境最住,將注入符合當(dāng)前運(yùn)行環(huán)境的相應(yīng)的bean。(可修飾類怠惶,方法涨缚,注解)
使用要求:
@Component 或 @Configuration 注解的類可以使用 @profile @Profile 中需要指定一個(gè)字符串,約定生效的環(huán)境
(1)配置文件方式激活profile
確定當(dāng)前使用的是哪個(gè)環(huán)境策治,這邊環(huán)境的值與application-prod.properties中-后面的值對(duì)應(yīng)脓魏,這
是SpringBoot約定好的。
在resources/application.properties中添加下面的配置通惫。需要注意的是茂翔,spring.profiles.active的
取值應(yīng)該與 @Profile 注解中的標(biāo)示保持一致。
spring.profiles.active=dev
(2)命令行方式激活profile
在打包后運(yùn)行的時(shí)候履腋,添加參數(shù):
java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev珊燎;
多Profile的資源文件
假設(shè),一個(gè)應(yīng)用的工作環(huán)境有:dev遵湖、test悔政、prod
那么,我們可以添加 4 個(gè)配置文件:
applcation.properties - 公共配置
application-dev.properties - 開發(fā)環(huán)境配置
application-test.properties - 測(cè)試環(huán)境配置
application-prod.properties - 生產(chǎn)環(huán)境配置