前言:
项目介绍,此项目是一个Maven多模块项目,模块项目:all(父模块);util (公用的工具类);dao(实体类、业务类、mapper、mapper.xml);business(业务service);app-root(是一个父级项目,包含了 backend、pc、mobile、schedule)……
结构图:
all + -- app-root + -- app-backend -- app-pc -- app-mobile -- app-schedule -- business -- dao -- util
错误:
错误介绍,我把app-backend项目用Maven打成war包之后,上传到生产的tomcat上,tomcat能正常启动。但是,访问的时候报404。
解决方法:
1、在app-backend项目中另外创建一个类(BackendInTomcatApplication)跟启动类(AppBackendApplication)在同一个包下,类代码如下
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); } }
2、在app-backend项目的pom.xml,中修改如下依赖。
<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内嵌的tomcat和我们的tomcat容器有冲突。希望能帮到看过这篇文章的人。