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

Spring Boot通过bootRun或Jar运行时出现GraphQL Schema错误

解决Spring Boot启动时嵌入式Tomcat无法启动的问题

你碰到的是Spring Boot启动阶段嵌入式Tomcat初始化失败的典型问题,我整理了几个最常见的排查方向和解决方案,帮你快速定位问题:

1. 优先检查端口占用情况

Tomcat默认使用8080端口,如果这个端口已经被其他程序占用,直接就会启动失败。你可以用这些命令排查:

  • Windows系统:netstat -ano | findstr :8080,找到对应的PID后,在任务管理器里结束该进程
  • Linux/macOS系统:lsof -i :8080 或者 netstat -tulpn | grep :8080,然后用kill -9 <PID>终止占用端口的进程

嫌麻烦的话,也可以直接在application.properties或application.yml里换个端口:

server.port=8081

2. 排查依赖冲突或缺失

这是最常见的诱因,比如:

  • 不小心同时引入了多个Servlet容器依赖(比如Tomcat和Jetty),Spring Boot无法确定使用哪个容器
  • Spring Boot版本与Tomcat依赖版本不兼容,导致初始化时出现类加载错误

你可以用Gradle的依赖树命令查看所有依赖的细节:

./gradlew dependencies

重点关注spring-boot-starter-web下的Tomcat相关依赖,看看有没有重复引入或者被错误排除的情况。如果你的build.gradle里有类似下面的代码,且你没打算替换成其他容器(比如Jetty),请删掉这段排除配置:

implementation('org.springframework.boot:spring-boot-starter-web') {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}

3. 检查配置文件的错误

有时候自定义的Tomcat配置写错了也会导致启动失败,比如:

  • server.tomcat.*开头的配置项格式错误
  • 自定义的Tomcat连接器、线程池配置参数不合理

你可以先暂时注释掉所有自定义的Tomcat配置,再尝试启动。如果能正常启动,再逐个恢复配置,慢慢排查出有问题的项。

4. 查看完整的错误堆栈

你提供的日志只显示了开头部分,真正的问题根源藏在Caused by开头的行里。比如:

  • 如果看到Caused by: java.net.BindException: Address already in use,那就是端口占用问题
  • 如果看到ClassNotFoundException,那就是依赖缺失或版本不匹配

把完整的错误日志打印出来,找到最底层的异常信息,就能精准定位问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:29:04