埋め込みJettyを使用して小さなWebサーバーを作成しようとしています。私はmaven用のshadeプラグインを使って "uberjar"にビルドします。これは私のスタートアップクラスの主な機能です:Heroku埋め込みJettyポートバインドタイムアウト
BasicConfigurator.configure();
logger.info("Starting server");
URI baseUri = UriBuilder.fromUri("http://localhost").port(8080).build();
ResourceConfig config = new ResourceConfig(WindowAction.class);
Server server = JettyHttpContainerFactory.createServer(baseUri, config);
server.start();
server.join();
logger.info("Server started");
これまでのところ、ローカルで動作します。ローカルでスタンドアロンサーバーを構築して実行することができます:
java -jar target/server-0.jar
そして、サーバーはlocalhost:8080に要求を応答します。驚くばかり。 実行したとき:
heroku local web
同じですが、サーバーは正常に応答します。 はしかし、私はHerokuのリモートにそれをプッシュするとき、私はポートバインドタイムアウトエラーを取得:
2017-08-08 22:12:52.396:INFO:oejs.Server:main: jetty-9.2.z-SNAPSHOT
2017-08-08T22:12:52.464157+00:00 app[web.1]: 2017-08-08 22:12:52.460:INFO:oejs.ServerConnector:main: Started [email protected]{HTTP/1.1}{0.0.0.0:8080}
2017-08-08T22:12:52.464414+00:00 app[web.1]: 2017-08-08 22:12:52.464:INFO:oejs.Server:main: Started @2891ms
2017-08-08T22:14:17.656011+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 90 seconds of launch
2017-08-08T22:14:17.656011+00:00 heroku[web.1]: Stopping process with SIGKILL
2017-08-08T22:14:17.792987+00:00 heroku[web.1]: Process exited with status 137
2017-08-08T22:14:17.810279+00:00 heroku[web.1]: State changed from starting to crashed
を私はそうのようなProcfileにおけるJavaのコマンドライン引数にポートを入れて試してみました:
$JAVA_OPTS -Dserver.port=$PORT -jar target/myserver.jar
空の文字列と評価さ
System.getenv("port")
を:
は、私はまた、実行時にサーバポートを取得しようとしました。 Herokuは、組み込みサーバーが "localhost"を使用するが、JettyHttpContainerFactory.createServer
にはURIが必要であると言われるのは好きではないかもしれません。誰かが彼らを素敵にする適切な方法を教えてくれますか?