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

雖然通常微服務都是把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";
    }
}
複製代碼

將項目打包成war包

修改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目錄查看效果 瀏覽器

能夠看到成功的把項目打成了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啓動日誌

能夠看到tomcat內部已經開始啓動mywar這個spring boot項目了

打開瀏覽器訪問查看效果

成功訪問到了編寫的測試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就能夠了

相關文章
相關標籤/搜索