Spring Boot项目本地正常,部署服务器出现404错误求助
部署Tomcat 9出现404无日志问题排查步骤
一、War包本身验证
- 解压war包,确认
WEB-INF/classes下存在编译后的DemoApplication.class、AppController.class等文件,WEB-INF/lib下包含完整的Spring Boot及相关依赖jar包。 - 确保war包文件名是
nameofwar.war,Tomcat默认会将war包名作为上下文路径,若文件名不匹配,访问路径会不一致。
二、Spring Boot war部署核心配置检查
1. pom.xml配置验证
- 确认打包类型设置为war:
<packaging>war</packaging> - 确认内嵌Tomcat依赖标记为
provided,避免与外部Tomcat冲突:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
- 确认maven插件指定了正确的主类:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.example.demo.DemoApplication</mainClass> </configuration> </plugin> </plugins> </build>
2. DemoApplication类配置验证
- 必须继承
SpringBootServletInitializer并重写configure方法,否则无法在外部Tomcat中启动Spring Boot应用:
@SpringBootApplication public class DemoApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoApplication.class); } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
三、Tomcat服务器配置检查
1. 部署路径与解压状态
- 查看Tomcat的
webapps目录,确认nameofwar.war已被自动解压为nameofwar文件夹,若未解压,可能是war包损坏或Tomcat运行用户无读写权限。 - 检查
conf/server.xml,若配置了自定义<Context>节点,确保path="/nameofwar"指向的war包路径正确,避免路径冲突。
2. 日志配置排查
- 调整
conf/logging.properties,添加或修改以下配置,提升Spring Boot相关日志级别:
org.springframework.level = INFO com.example.level = INFO
- 查看Tomcat
logs目录下的catalina.out、localhost.log、localhost_access_log.*.txt,这些文件可能记录了应用启动的错误信息,不要仅关注应用自身日志。 - 确认Tomcat运行用户对
webapps和logs目录有读写权限,权限不足会导致无法解压war包或写入日志。
四、应用路由与静态资源检查
1. AppController路由验证
- 确认Controller的路由无需包含上下文路径
/nameofwar,Tomcat会自动拼接该路径。例如:
@Controller @RequestMapping("/") public class AppController { @GetMapping("/") public String index() { return "index"; } }
此时访问路径应为/nameofwar/,若Controller指定了@RequestMapping("/test"),则访问路径是/nameofwar/test。
2. 静态资源与视图解析配置
- 检查
application.properties中的视图解析配置,以Thymeleaf为例:
spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html
- 确认
index.html已被打包到war包的WEB-INF/classes/templates目录下。
五、Java版本兼容性检查
- 确认服务器Java 11版本与本地开发环境一致(如均为OpenJDK或Oracle JDK),避免版本差异导致类加载异常。
- 确保Tomcat版本为9.0.13及以上,该版本开始正式支持Java 11,若版本过低需升级。
内容的提问来源于stack exchange,提问作者skylight
相关产品推荐
相关产品推荐

