三分鐘把spring boot打成war包部署到tomcat中

蘇小林發表於2019-05-07

雖然一般微服務都是把spring boot專案打成jar直接啟動,但是war包作為經典的專案啟動方式,是有必要掌握的。

完整專案程式碼已上傳github:github.com/neatlife/my…

寫作花費了作者大量時間,求贊,求關注 _(:з」∠)_

準備案例專案

可以直接拿現成的spring boot專案進行修改,也可以在https://start.spring.io/建立一個新的案例專案,比如:

三分鐘把spring boot打成war包部署到tomcat中

如果是在start.spring.io上建立的新專案,需要把web元件加到專案裡,這個編寫測試介面會用到web元件裡的控制器。 

然後在idea中開啟這個專案,編寫兩個用來測試的api

@RestController
@RequestMapping("test")
public class MyController {
    @RequestMapping("test1")
    public String test1() {
        return "test1";
    }

    @RequestMapping("test2")
    public String test2() {
        return "test2";
    }
}
複製程式碼

將專案打包成war包

修改pom.xml指定打包方式為war包: <packaging>war</packaging> 修改pom.xml修改spring boot內建的tomcat依賴,指定scope為provided

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>
複製程式碼

修改成果如下:

三分鐘把spring boot打成war包部署到tomcat中

建立一個初始化檔案初始化專案比如:MySpringBootServletInitializer.java 核心程式碼如下

public class MySpringBootServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(MywarApplication.class);
    }
}
複製程式碼

執行命令mvn clean install -Dmaven.test.skip=true將專案打成war包,執行後到target目錄檢視效果

三分鐘把spring boot打成war包部署到tomcat中
可以看到成功的把專案打成了war包

把專案的war放到tomcat裡執行

可以使用docker一鍵啟動tomcat,把專案war所在的target目錄掛載到tomcat的webapps目錄

docker run --name=tomcat -itd --rm -p 8888:8080 \
  -v /Users/suxiaolin/Dropbox/Projects/mywar/target:/usr/local/tomcat/webapps tomcat:8-jre8
複製程式碼

可以使用docker logs -f tomcat檢視tomcat啟動日誌

三分鐘把spring boot打成war包部署到tomcat中
可以看到tomcat內部已經開始啟動mywar這個spring boot專案了

開啟瀏覽器訪問檢視效果

三分鐘把spring boot打成war包部署到tomcat中
成功訪問到了編寫的測試api

注意這個url字首是war包完整的包名,完整url如下

http://127.0.0.1:8888/mywar-0.0.1-SNAPSHOT/test/test1
http://127.0.0.1:8888/mywar-0.0.1-SNAPSHOT/test/test2
複製程式碼

一些注意的點

可以修改最終的war包的名稱,比如去掉檔名裡的版本號:mywar.war,在pom.xml使用finalName指令可以實現

三分鐘把spring boot打成war包部署到tomcat中

重新打包檢視效果

三分鐘把spring boot打成war包部署到tomcat中

這樣訪問url就方便了

三分鐘把spring boot打成war包部署到tomcat中

tomcat啟動時可能報這個錯, 參考Unsupported major.minor version 52.0解決辦法Unsupported major.minor version 52.0 (unable to load class org.springframework.web.SpringServletContainerInitializer)

這是因為專案打包的java版本和tomcat的java版本不一致導致的,目前一般使用java8,tomcat的docker映象選擇tomcat:8-jre8就可以了

相關文章