爲什麼要以war包方式發佈項目?
springboot雖然內嵌tomcat,以java -jar運行也比較方便,但是該項目時單節點應用,用來開發測試比較好用;當需要部署多個節點應用時(即分佈式集羣部署),就需要用到war方式。
打包步驟
- packaging需要改爲war,build組件也不可少
pom.xml的配置摘要如下:
<!-- 修改爲war-->
<packaging>war</packaging>
<!-- 打包組件-->
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 移除內嵌Tomcat,將spring-boot-starter-web中的Tomcat排除(即maven中的exclusions),並添加servlet-api的依賴
pom.xml的配置摘要如下:
<!--exclusions 爲war包方式發佈時,排除內嵌的tomcat,如果是jar包方式發佈,需把exclusions註釋掉-->
<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>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
- 修改SpringBoot啓動類
需要繼承SpringBootServletInitializer,並重寫configure方法
啓動類代碼如下:
/**
* 項目運行入口
* 繼承SpringBootServletInitializer爲以war包方式發佈項目
* 如果是以jar包發佈需移除繼承的SpringBootServletInitializer類和configure方法
*/
@SpringBootApplication
public class MainApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MainApplication.class);
}
}
- 打包編譯
進入到項目的根目錄後,執行下面命令即可打包
#clean爲清除target下的文件,-Dmaven.test.skip=true爲不用編譯和執行測試用例
#執行打包完成後,會在target目錄下生成一個war包
mvn clean install -Dmaven.test.skip=true
- 把war包放到tomcat的webapps下
如果想讓項目作爲默認應用(即訪問時不加項目名),需要把ROOT目錄和ROOT.war刪掉,把該項目改名爲ROOT.war
linux下命令爲:
cp qixing-shop.war /usr/local/tomcat/webapps/
#如果不作爲默認應用,下面三條命令不用執行
rm -rf /usr/local/tomcat/webapps/ROOT
rm -rf /usr/local/tomcat/webapps/ROOT.war
mv qixing-shop.war ROOT.war
-
啓動
windows執行tomcat的bin目錄下的startup.bat啓動
linux執行tomcat的bin目錄下的startup.sh,即sh startup.sh
-
訪問
非默認應用訪問路徑:localhost:8080/qixingcxy-shop/login
默認應用訪問路徑:localhost:8080/login