Spring Boot+PostgreSQL部署Heroku遇503(H10)崩溃问题求助
解决Heroku部署Spring Boot应用出现H10(App crashed)错误的方案
针对部署后应用崩溃、返回503错误的问题,结合提供的配置,可从以下几个方向排查修复:
1. 修复system.properties的错误配置
当前system.properties里的PORT=process.env.port || 8080是Node.js语法,Java环境无法识别。Heroku会自动注入PORT环境变量,Procfile中已通过-Dserver.port=$PORT读取该变量,因此删除这行错误配置,保留正确的Java版本配置即可:
java.runtime.version=17.0.4
2. 验证Procfile的准确性
确认Procfile中指定的jar包路径和名称与实际打包产物完全一致:
- 执行
mvn clean package(Maven)或./gradlew build(Gradle)完成打包后,检查target目录下是否存在spring-boot-info-earth-0.0.1-SNAPSHOT.jar - 若jar包名称有误(如SNAPSHOT拼写错误、版本号不一致),修正Procfile中的对应内容:
web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/[正确的jar包名称].jar
3. 确认数据库连接配置适配Heroku环境
虽然本地数据库连接正常,但Heroku上的PostgreSQL需通过其提供的DATABASE_URL环境变量配置:
- 在
application.properties中添加以下配置(Spring Boot会自动解析DATABASE_URL中的用户名、密码、地址信息):spring.datasource.url=${DATABASE_URL} spring.datasource.driver-class-name=org.postgresql.Driver spring.jpa.hibernate.ddl-auto=update # 根据自身需求调整 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect - 确保
pom.xml中包含适配Java 17的PostgreSQL驱动依赖:<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency>
4. 查看详细崩溃日志定位根因
H10错误仅表明应用崩溃,需通过Heroku日志获取具体异常信息:
- 使用Heroku CLI执行命令:
重点关注应用启动时的报错,比如类缺失、数据库连接失败、端口绑定冲突等,这些信息是精准修复的关键。heroku logs --tail
5. 验证本地打包产物的可用性
在本地直接运行打包后的jar包,排除打包过程中的问题:
java -jar target/spring-boot-info-earth-0.0.1-SNAPSHOT.jar --server.port=8080
若本地运行失败,先修复本地打包或代码问题后再重新部署。
内容的提问来源于stack exchange,提问作者Selimhan Baltaş
相关产品推荐
相关产品推荐

