Spring Boot:Heroku在成功部署后出错



我已经为这个问题挣扎了几天,在SO上找不到任何东西,heroku上错误代码的描述太模糊了,我无法弄清楚任何事情。我已经创建了一个没有数据库集成的基本应用程序,使用spring框架、thymelaf和spring-mail。我没有弹簧安全装置。在成功地将其部署到heroku之后,我尝试启动应用程序服务器,这就是我在heroku日志中得到的。该应用程序在本地主机上运行良好,没有任何问题。

2020-08-05T08:03:50.144941+00:00 app[web.1]: 2020-08-05 08:03:50.144  INFO 4 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-08-05T08:03:50.458342+00:00 app[web.1]: 2020-08-05 08:03:50.458  INFO 4 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-08-05T08:03:50.471638+00:00 app[web.1]: 2020-08-05 08:03:50.471  INFO 4 --- [           main] c.e.P.MyWebWebsiteApplication        : Started MyWebWebsiteApplication in 2.688 seconds (JVM running for 3.226)
2020-08-05T08:04:53.993643+00:00 heroku[router]: at=error code=H20 desc="App boot timeout" method=GET path="/" host=myweb01.herokuapp.com request_id=0fb69db1-5c01-412e-b01f-451a8a2b7ad8 fwd="86.124.21.129" dyno= connect= service= status=503 bytes= protocol=https
2020-08-05T08:05:16.255402+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch
2020-08-05T08:05:16.271979+00:00 heroku[web.1]: Stopping process with SIGKILL
2020-08-05T08:05:16.349020+00:00 heroku[web.1]: Process exited with status 137
2020-08-05T08:05:16.389343+00:00 heroku[web.1]: State changed from starting to crashed
2020-08-05T08:05:16.392175+00:00 heroku[web.1]: State changed from crashed to starting
2020-08-05T08:05:23.662195+00:00 heroku[web.1]: Starting process with command `java $JAVA_OPTS -jar target/MyWebWebsite-0.0.1-SNAPSHOT.jar -Dserver.port=25487 $JAR_OPTS`
2020-08-05T08:05:25.791836+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2020-08-05T08:05:25.796964+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8 

这是我的procfile:

web: java $JAVA_OPTS -jar target/MyWebWebsite-0.0.1-SNAPSHOT.jar -Dserver.port=$PORT $JAR_OPTS

阅读日志并在这里找到Tomcat started on port(s): 8080,我想这可能是个问题?我的意思是tomcat试图在localhost端口而不是heroku端口上启动?如果是这种情况,我该如何解决?如果不是这样的话,会有什么问题呢?

从这里的文档中,错误代码H20表示

路由器将请求排队75秒,同时等待启动进程以达到"向上"状态。如果在75秒后,没有webdynos已达到"向上"状态,路由器记录H20并为标准错误页面

如果您的应用程序需要更多的启动时间,您可以使用启动超时工具来增加限制。然而,一般来说,缓慢的启动时间会使部署应用程序变得更加困难,并会使从dyno故障中恢复的速度变慢,因此这应该被视为的临时解决方案

尝试将启动超时设置为120秒-一些SpringBoot应用程序需要一些时间才能启动。可以按如下所示完成请求:https://devcenter.heroku.com/changelog-items/364

此外,健康检查过程是基于HTTP请求的,因此请确保您的应用程序是通过正常的Web端口(8080433(提供服务的。

最新更新