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

Spring Boot部署为Tomcat的ROOT应用时卡住问题求助

解决Spring Boot WAR包在Tomcat中部署卡住的问题

从你提供的部署日志、pom配置和遇到的卡点来看,我整理了几个针对性的排查和解决方向,你可以逐一尝试:

1. 修正Spring Boot WAR包的构建配置

你的pom.xml里的Spring Boot Maven插件配置缺少了外部Tomcat部署的关键设置,这很可能是导致部署卡住的核心原因:

  • 需要排除Spring Boot自带的内嵌Tomcat,避免和外部Tomcat产生冲突
  • 启动类要继承SpringBootServletInitializer,让外部Tomcat能正确识别Spring Boot应用

调整pom.xml配置:

<dependencies>
    <!-- 排除内嵌Tomcat依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- 添加Tomcat Servlet API依赖(仅编译时生效) -->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet-api</artifactId>
        <version>8.5.35</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- 配置Maven War插件,允许无web.xml的情况 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

修改启动类:

@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

2. 分析阻塞线程的根源(基于JStack日志)

从你提供的JStack内容来看,负责部署的localhost-startStop-1线程处于等待状态,大概率是卡在了某个资源获取环节,常见场景包括:

  • 数据库连接问题:检查application配置文件中的数据库URL、账号密码是否正确,目标数据库是否正常运行、服务器能否访问
  • 文件权限不足:确认Tomcat进程对webapps、temp、logs目录有读写权限,手动解压WAR包试试能否正常读取内容
  • 第三方服务依赖:如果应用启动时需要连接Redis、MQ等外部服务,检查这些服务是否可用
  • 端口冲突:用netstat -tulpn | grep 80确认80端口是否被其他进程占用

3. 优化Tomcat启动参数和日志

  • 日志里显示-Djava.security.egd=file:/dev/./urandom被重复添加了,建议在catalina.sh中只保留一次,避免参数冲突
  • 开启Tomcat的DEBUG级日志,修改conf/logging.properties,添加:
    org.apache.catalina.startup.HostConfig.level = FINEST
    org.apache.catalina.startup.HostConfig.handlers = java.util.logging.ConsoleHandler
    
    这样能看到部署过程中的详细步骤,更容易定位卡点
  • 尝试调整内存参数,把-Xmx1024M提升到-Xmx2048M,避免内存不足导致的启动卡顿

4. 手动解压WAR包测试

先把ROOT.war手动解压到webapps/ROOT目录,再启动Tomcat,排除WAR包损坏的可能:

cd /home/tomcat/webapps
unzip ROOT.war -d ROOT

启动后观察日志,看是否会出现更明确的报错信息


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:37:49