这几天正好遇到有几个项目要用Tomcat启动springboot的项目,记录一下。用Tomcat启动有个好处就是:替换配置文件或者静态文件不用关闭服务。
现在说一下怎么实现:
1、需要将springboot打包方式改成war,在pom.xml中配置<project>标签下配置<packaging>
<!-- 打包方式 -->
<packaging>war</packaging>
2、要将springboot内置的tomcat排除,然后引入指定Tomcat版本
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除内部tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入指定版本Tomcat -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.82</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>8.5.82</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>8.5.82</version>
<scope>provided</scope>
</dependency>
3、让springboot启动类继承SpringBootServletInitializer,重写configure方法
@SpringBootApplication
public class DemoUtilsApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DemoUtilsApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(DemoUtilsApplication.class);
}
}
还要在pom.xml指定启动类
4、右键项目 ==》Maven ==》Update Project
然后添加到Tomcat启动,正常启动打印tomcat日志后会有springboot项目日志
至此项目已经启动。
扩展:访问报404
1、检查项目application.yml文件
2、检查Tomcat配置路径