背景:最近在使用SpringBoot项目过程中,代码写好测试完,部署到服务器上启动使用外置的tomcat启动,控制台只输出org.apache.catalina.startup.catalina.start server startup in xxxms,就没有后续了,访问服务的接口,也是失败,说明服务没有启动起来,但是就是访问不同,查了很多资料,最后解决方案如下:
报错截图:
解决方案:
1、确认pom.xml的project节点下有标签<packaging>war</packaging>,通常配置在artifactId及version标签下。
外置tomcat启动项目的pom中必须有依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
2、若新建项目时选择的Packaging是war,将会在项目根目录生成ServletInitializer类。
3、若项目中没有ServletInitializer类,则新建ServletInitializer类,继承SpringBootServletInitializer并重写configure方法,亦可直接在SpringbootdemoApplication类上继承SpringBootServletInitializer。建议新建ServletInitializer类,这样目录结构很清晰,一看目录结构就清楚该项目是用tomcat启动的。
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.stereotype.Component;
@Component
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringbootdemoApplication.class);
}
}
SpringbootdemoApplication.class是启动类,在不同的项目,这里需要改下。
至于SpringBootServletInitializer的作用,可以参考这篇文章: