天天看点

SpringBoot项目用tomcat启动,没有报错,控制台只输出org.apache.catalina.startup.catalina.start server startup in xxxms

背景:最近在使用SpringBoot项目过程中,代码写好测试完,部署到服务器上启动使用外置的tomcat启动,控制台只输出org.apache.catalina.startup.catalina.start server startup in xxxms,就没有后续了,访问服务的接口,也是失败,说明服务没有启动起来,但是就是访问不同,查了很多资料,最后解决方案如下:

       报错截图:

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的作用,可以参考这篇文章:

https://blog.csdn.net/qq_28289405/article/details/81279742