天天看點

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