簡體   English   中英

Spring 托管在 Heroku 上的引導項目 - Web 進程未能在啟動后 90 秒內綁定到 $PORT

[英]Spring Boot project hosted on Heroku - Web process failed to bind to $PORT within 90 seconds of launch

我在 stackoverflow 上閱讀了許多類似的問題,但沒有任何幫助。

我創建了一個 spring 啟動 maven 后端項目並托管在 heroku 上。

但是,當我嘗試從前端調用時,它會在瀏覽器中顯示這樣的錯誤。 GET https://hoyamu-springboot-backend.herokuapp.com/fetch/bag 503

當我查看 heroku 的日志時,它顯示這樣的錯誤。 Web process failed to bind to $PORT within 90 seconds of launch 我做了一切,但沒有任何效果。

我的文件如下,

Heroku 應用日志

020-08-08T21:32:21.232432+00:00 heroku[web.1]: State changed from crashed to starting
2020-08-08T21:32:25.103258+00:00 heroku[web.1]: Starting process with command `java -Dserver.port=48348 $JAVA_OPTS -jar target/hoyamu-0.0.1-SNAPSHOT.jar`
2020-08-08T21:32:27.226023+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
2020-08-08T21:32:27.230034+00:00 app[web.1]: Picked up JAVA_TOOL_OPTIONS: -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8 
2020-08-08T21:32:28.818160+00:00 app[web.1]: 
2020-08-08T21:32:28.818210+00:00 app[web.1]:   .   ____          _            __ _ _
2020-08-08T21:32:28.818211+00:00 app[web.1]:  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
2020-08-08T21:32:28.818214+00:00 app[web.1]: ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
2020-08-08T21:32:28.818294+00:00 app[web.1]:  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
2020-08-08T21:32:28.818323+00:00 app[web.1]:   '  |____| .__|_| |_|_| |_\__, | / / / /
2020-08-08T21:32:28.818414+00:00 app[web.1]:  =========|_|==============|___/=/_/_/_/
2020-08-08T21:32:28.819695+00:00 app[web.1]:  :: Spring Boot ::        (v2.2.6.RELEASE)
2020-08-08T21:32:28.819727+00:00 app[web.1]: 
2020-08-08T21:32:29.047717+00:00 app[web.1]: 2020-08-08 21:32:29.044  INFO 4 --- [           main] com.udith.hoyamu.HoyamuApplication       : Starting HoyamuApplication v0.0.1-SNAPSHOT on 50382c68-eaab-4b3c-ac0c-a881a18e4a0b with PID 4 (/app/target/hoyamu-0.0.1-SNAPSHOT.jar started by u8138 in /app)
2020-08-08T21:32:29.048863+00:00 app[web.1]: 2020-08-08 21:32:29.048  INFO 4 --- [           main] com.udith.hoyamu.HoyamuApplication       : No active profile set, falling back to default profiles: default
2020-08-08T21:32:30.083462+00:00 app[web.1]: 2020-08-08 21:32:30.081  INFO 4 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-08-08T21:32:30.224960+00:00 app[web.1]: 2020-08-08 21:32:30.224  INFO 4 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 130ms. Found 18 JPA repository interfaces.
2020-08-08T21:32:31.310818+00:00 app[web.1]: 2020-08-08 21:32:31.310  INFO 4 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 48348 (http)
2020-08-08T21:32:31.327532+00:00 app[web.1]: 2020-08-08 21:32:31.327  INFO 4 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-08-08T21:32:31.327720+00:00 app[web.1]: 2020-08-08 21:32:31.327  INFO 4 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.33]
2020-08-08T21:32:31.405048+00:00 app[web.1]: 2020-08-08 21:32:31.404  INFO 4 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-08-08T21:32:31.405289+00:00 app[web.1]: 2020-08-08 21:32:31.405  INFO 4 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2272 ms
2020-08-08T21:32:31.669531+00:00 app[web.1]: 2020-08-08 21:32:31.669  INFO 4 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-08-08T21:32:31.931057+00:00 app[web.1]: 2020-08-08 21:32:31.930  INFO 4 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.12.Final
2020-08-08T21:32:32.109028+00:00 app[web.1]: 2020-08-08 21:32:32.108  INFO 4 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-08-08T21:32:32.249430+00:00 app[web.1]: 2020-08-08 21:32:32.249  INFO 4 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-08-08T21:32:33.786599+00:00 app[web.1]: 2020-08-08 21:32:33.786  INFO 4 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-08-08T21:32:33.850851+00:00 app[web.1]: 2020-08-08 21:32:33.850  INFO 4 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2020-08-08T21:33:55.347291+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch
2020-08-08T21:33:55.368253+00:00 heroku[web.1]: Stopping process with SIGKILL
2020-08-08T21:33:55.465503+00:00 heroku[web.1]: Process exited with status 137
2020-08-08T21:33:55.499546+00:00 heroku[web.1]: State changed from starting to crashed

2020-08-08T21:50:58.187914+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/fetch/bag" host=hoyamu-springboot-backend.herokuapp.com request_id=db721f39-aab3-4a3f-82e9-6495dc6bc7a8 fwd="112.135.40.125" dyno= connect= service= status=503 bytes= protocol=https

檔案

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

應用程序屬性

hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

spring.datasource.url=jdbc:mysql://remotemysql.com:3306/MMgqawaw
spring.datasource.username=username
spring.datasource.password=password

spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.show_sql=true
spring.jpa.hibernate.format_sql=true
spring.jpa.show-sql=true


```
What should I do?

經過幾次小型調查,我可以找到解決問題的方法。

錯誤Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch可能由於兩個原因而發生。

  1. 實際上應用程序無法綁定端口,因為它沒有在 procfile 中正確定義。 您可以通過閱讀一些 stackoverflow 問題找到解決方案。 簡而言之,procfile 應該如下所示:

(部署后將 <BUILT_APP_NAME_HERE> 替換為您的應用名稱)

web: java $JAVA_OPTS -jar -Dserver.port=$PORT target/<BUILT_APP_NAME_HERE>.jar

[或者]

給*的時候不需要指定名字

web: java $JAVA_OPTS -jar -Dserver.port=$PORT target/*.jar

[或者]

web: java $JAVA_OPTS -jar -Dspring.profiles.active=production target/<BUILT_APP_NAME_HERE>.jar --port $PORT

  1. 第二個原因是,如錯誤所示,它嘗試在啟動 90 秒(對於某些應用程序為 60 秒)后綁定端口,即使應用程序尚未完全啟動。 默認情況下,對於 java 應用程序,heroku 已將啟動時間限制為 90 秒。 如果 Heroku 在此期間無法綁定端口,則應用程序被標記為崩潰。 在這里,在我的項目中,與遠程數據庫建立連接需要一點時間,但是 heroku 不會等到建立數據庫連接,因為它的啟動時間是 90 秒。

解決方案是,我們必須增加應用程序的啟動時間。 您可以按照此鏈接執行此操作。 (這個鏈接有時候會報錯,換個瀏覽器或者手機瀏覽器試試)

https://tools.heroku.support/limits/boot_timeout

但是,不建議將啟動時間增加 120 秒以上。

但是,在實際情況下,您應該找到為什么需要花費大量時間來建立數據庫連接的解決方案。

我能夠使用此 Procfile 內容運行我的 spring mvc 應用程序:

web: java $JAVA_OPTS -jar 目標/依賴/webapp-runner.jar --port $PORT 目標/*.war

這是部署的應用程序: http://duckingrace.herokuapp.com/web/canvasv1

這是源代碼: https://github.com/fajaralmu/java-websocket1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM