雖然一般微服務都是把spring boot專案打成jar直接啟動,但是war包作為經典的專案啟動方式,是有必要掌握的。
完整專案程式碼已上傳github:github.com/neatlife/my…
寫作花費了作者大量時間,求贊,求關注 _(:з」∠)_
準備案例專案
可以直接拿現成的spring boot專案進行修改,也可以在https://start.spring.io/建立一個新的案例專案,比如:
如果是在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>
複製程式碼
修改成果如下:
建立一個初始化檔案初始化專案比如: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目錄檢視效果
把專案的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啟動日誌
開啟瀏覽器訪問檢視效果
成功訪問到了編寫的測試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指令可以實現
重新打包檢視效果
這樣訪問url就方便了
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就可以了