Springboot项目打成war包,部署到tomcat上,正常启动访问报错404

时间:2024-01-21 21:00:27

前言:

  项目介绍,此项目是一个Maven多模块项目,模块项目:all(父模块);util (公用的工具类);dao(实体类、业务类、mapper、mapper.xml);business(业务service);app-root(是一个父级项目,包含了 backend、pc、mobile、schedule)……

  结构图:

Springboot项目打成war包,部署到tomcat上,正常启动访问报错404
all +
-- app-root +
-- app-backend
-- app-pc
-- app-mobile
-- app-schedule
-- business
-- dao
-- util
Springboot项目打成war包,部署到tomcat上,正常启动访问报错404

错误:

  错误介绍,我把app-backend项目用Maven打成war包之后,上传到生产的tomcat上,tomcat能正常启动。但是,访问的时候报404。 

解决方法:

   1、在app-backend项目中另外创建一个类(BackendInTomcatApplication)跟启动类(AppBackendApplication)在同一个包下,类代码如下

Springboot项目打成war包,部署到tomcat上,正常启动访问报错404
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer; /**
* @author wang.hz
* @Date 2018/7/4
* <p>解决springboot打成war包,部署tomcat后访问404问题</p>
*/
public class BackendInTomcatApplication extends SpringBootServletInitializer { @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(AppBackendApplication.class);
} }
Springboot项目打成war包,部署到tomcat上,正常启动访问报错404

  2、在app-backend项目的pom.xml,中修改如下依赖。

Springboot项目打成war包,部署到tomcat上,正常启动访问报错404
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--忽略内嵌tomcat,打包部署到tomcat。注*本地运行的时候要把这一段忽略引入个注释掉,要不然项目启动不了-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Springboot项目打成war包,部署到tomcat上,正常启动访问报错404

总结:

  我通过上面两步,问题就解决了。报错原因是因为springboot内嵌的tomcat和我们的tomcat容器有冲突。希望能帮到看过这篇文章的人。