Heroku部署SpringBoot应用出现H10错误(应用崩溃)求助
Spring Boot部署Heroku后崩溃(H10错误)排查与解决
问题描述
将Spring Boot应用从GitHub部署到Heroku后出现崩溃,进程退出状态码为1,Heroku返回H10错误(App crashed)。已尝试以下操作但未解决:
- 在
application.properties中添加server.port=${PORT:8080} - 添加Procfile,尝试两种启动命令:
web: java $JAVA_OPTS -jar target/CexToolSever-0.0.1-SNAPSHOT.jar --server.port=$PORT $JAR_OPTSweb: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war
相关日志片段:
2022-10-12T18:20:15.550627+00:00 app[web.1]: Syntax: -Akey=value 2022-10-12T18:20:15.550628+00:00 app[web.1]: Default: {} 2022-10-12T18:20:15.550628+00:00 app[web.1]: 2022-10-12T18:20:15.688794+00:00 heroku[web.1]: Process exited with status 1 2022-10-12T18:20:15.810897+00:00 heroku[web.1]: State changed from starting to crashed 2022-10-12T18:20:20.932826+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=cexjava.herokuapp.com request_id=55635bbb-091d-4f2b-851d-5517bc7827ca fwd="203.205.41.247" dyno= connect= service= status=503 bytes= protocol=https
排查与解决步骤
1. 修正启动命令中的参数错误
日志中的Syntax: -Akey=value提示说明启动参数存在格式问题,大概率是$JAVA_OPTS或$JAR_OPTS包含无效的-A参数格式。建议简化Procfile命令,先去掉环境变量,使用最基础的启动命令:
web: java -jar target/CexToolServer-0.0.1-SNAPSHOT.jar --server.port=$PORT
注意:检查jar包名称是否正确,日志中的CexToolSever可能存在拼写错误(应为Server),确认target目录下的jar包实际文件名。
2. 查看完整启动日志
当前日志仅显示部分错误提示,使用以下命令获取完整的启动日志,定位具体崩溃原因:
heroku logs --tail
重点关注启动时的异常信息,比如类缺失、配置错误、数据库连接失败等。
3. 确认打包方式与启动命令匹配
- 如果你的Spring Boot应用是jar打包(默认方式),使用jar启动命令,不要混用war包的
webapp-runner命令。 - 如果是war打包,确保
webapp-runner.jar已正确引入依赖,且war包路径正确。
4. 统一Java版本
Heroku默认使用的Java版本可能与本地开发环境不一致,导致兼容性问题:
- 在
pom.xml中指定Java版本:
<properties> <java.version>17</java.version> <!-- 替换为你的项目使用的Java版本 --> </properties>
- 在项目根目录创建
system.properties文件,添加:
java.runtime.version=17
5. 检查应用配置
- 确认
application.properties中没有无效配置,比如未在Heroku设置的数据库连接参数,这类配置会导致应用启动失败。 - 若使用环境变量,确保Heroku已正确配置对应变量(通过Heroku控制台或
heroku config:set KEY=VALUE命令设置)。
内容的提问来源于stack exchange,提问作者eragon
相关产品推荐
相关产品推荐

