我正在尝试使用嵌入式Jetty创建一个小型Web服务器。我把它建成了一个" uberjar"使用shaven插件为maven。这是我的Startup课程的主要功能:
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 ServerConnector@5890e879{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。任何人都可以指出让他们玩得好的正确方法吗?
答案 0 :(得分:1)
env var PORT
全部上限:
System.getenv("PORT")
以下是一个完整的示例:https://github.com/kissaten/java-minimal/blob/master/src/main/java/Main.java#L63