三分钟把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就能够了

相关文章
相关标签/搜索