You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot应用本地正常,部署到DailyRazor Tomcat后返回404

Spring Boot部署Tomcat 8遇404及类加载/内存问题解决指南

问题根源分析

从你提供的Tomcat日志看,两个核心问题导致服务异常:

  • java.lang.NoClassDefFoundError: Could not initialize class org.apache.tomcat.util.buf.B2CConverter:War包内置Tomcat类与服务器端Tomcat 8冲突,引发核心类初始化失败
  • java.lang.OutOfMemoryError: Java heap space:Tomcat堆内存不足,导致服务启动或请求处理失败

分步修复方案

1. 修复War包依赖,消除Tomcat类冲突

你的build.gradle未将Spring Boot内置Tomcat标记为providedRuntime,导致War包携带Tomcat核心类,与服务器端Tomcat产生冲突。

修改dependencies块,添加:

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

无需指定版本,Spring Boot依赖管理会自动匹配你的2.2.2.RELEASE版本,避免版本不一致问题。

同时清理冗余依赖:

  • 删除重复的com.h2database:h2依赖,只保留一行即可
  • 移除compile group: 'org.apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.2',这是Maven插件,Gradle项目无需引入

2. 调整Tomcat堆内存配置

DailyRazor的Tomcat默认堆内存不足以支撑应用启动,需调整JVM参数:

  • 联系服务商修改Tomcat启动参数,或找到bin/catalina.sh(Linux)/catalina.bat(Windows)文件
  • 添加JVM参数:
    -Xms512m -Xmx1024m
    
    (初始堆512MB,最大堆1GB,可根据应用规模调整)

3. 验证War包有效性

  • 执行gradlew clean bootWar重新打包,确保War包生成在build/libs目录
  • 解压War包,检查WEB-INF/lib中无tomcat-*开头的核心依赖(仅保留API类)
  • 确认访问路径:若War包名为xxx.war,访问URL需带上上下文路径http://你的域名/xxx/,而非直接访问根路径

4. 确认Spring Boot启动类配置

你的启动类已正确继承SpringBootServletInitializer并实现configure方法,额外需注意:

  • 启动类所在包需为所有业务类的父包,确保Spring能自动扫描组件
  • 若自定义@ComponentScan注解,需包含所有需扫描的包路径

额外排查项

  • 确认服务商Tomcat版本:Spring Boot 2.2.x兼容Tomcat 8.5.x及以上,若为Tomcat 8.0.x可能存在兼容性问题,建议升级到8.5+
  • 查看Tomcat的localhost.log,确认应用启动过程中是否有其他报错信息

内容的提问来源于stack exchange,提问作者Abdullah Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:05:17