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

Heroku部署Spring Boot应用启动后崩溃求助:R10启动超时错误

解决Heroku上Spring Boot应用启动后崩溃的R10/Boot Timeout问题

嘿,我之前碰到过完全一样的情况!从你的错误日志里能揪出核心问题:Heroku的R10启动超时错误,根源是你的Spring Boot应用没在启动后90秒内绑定到Heroku提供的$PORT环境变量端口。

问题拆解

日志里的几个关键错误已经把原因说透了:

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch

Heroku的dyno会动态分配端口,并且要求应用必须绑定这个端口才能对外提供服务。如果你的应用硬编码了固定端口(比如本地常用的8080),Heroku检测不到端口绑定,就会直接杀掉进程,进而引发后续的H10(应用崩溃)、H20(路由错误)问题——哪怕你的应用本身已经启动成功了。

快速修复步骤

  • 配置Spring Boot适配动态端口
    在application.properties或application.yml里添加端口配置,让应用优先读取Heroku的$PORT变量,本地开发时 fallback 到8080:

    # application.properties
    server.port=${PORT:8080}
    

    或者YAML格式:

    # application.yml
    server:
      port: ${PORT:8080}
    
  • 检查Procfile的正确性
    确保Procfile里没有手动指定端口,正确的格式应该是这样:

    web: java -jar target/your-app-name.jar
    

    别加--server.port=xxxx这类额外参数,让Spring Boot通过配置文件自动读取端口。

  • 验证启动日志
    重新部署后,查看启动日志确认端口绑定是否成功。你应该能看到类似这样的日志:

    Tomcat started on port(s): 45678 (http) with context path ''
    这里的45678就是Heroku分配的$PORT值,出现这条日志就说明绑定成功了。

  • 启动速度优化(可选)
    你的应用启动只用了23秒,远低于90秒的限制,但如果后续出现启动慢的情况,可以试试:

    • 开启Spring Boot懒加载:spring.main.lazy-initialization=true
    • 优化数据库连接配置,避免启动时过长等待
    • 移除项目里不需要的自动配置项

按照这些步骤操作后,你的应用应该就能稳定在Heroku上运行了!

内容的提问来源于stack exchange,提问作者Michał Osik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:32:18