雖然通常微服務都是把spring boot項目打成jar直接啓動,可是war包做爲經典的項目啓動方式,是有必要掌握的。html
完整項目代碼已上傳github:github.com/neatlife/my…java
寫做花費了做者大量時間,求贊,求關注 _(:з」∠)_
git
能夠直接拿現成的spring boot項目進行修改,也能夠在https://start.spring.io/建立一個新的案例項目,好比: github
若是是在start.spring.io上建立的新項目,須要把web組件加到項目裏,這個編寫測試接口會用到web組件裏的控制器。 web
而後在idea中打開這個項目,編寫兩個用來測試的apispring
@RestController
@RequestMapping("test")
public class MyController {
@RequestMapping("test1")
public String test1() {
return "test1";
}
@RequestMapping("test2")
public String test2() {
return "test2";
}
}
複製代碼
修改pom.xml指定打包方式爲war包: <packaging>war</packaging>
修改pom.xml修改spring boot內置的tomcat依賴,指定scope爲provideddocker
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
複製代碼
修改爲果以下: shell
建立一個初始化文件初始化項目好比:MySpringBootServletInitializer.java 核心代碼以下api
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目錄查看效果 瀏覽器
能夠使用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就能夠了