我正在尝试在heroku上部署我的服务器。我收到了这个错误:
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
这是我的Java类:
package introsde.document.endpoint;
import javax.xml.ws.Endpoint;
import introsde.assignment.soap.PeopleImpl;
public class PeoplePublisher {
public static String SERVER_URL = "http://localhost";
public static String PORT = "6902";
public static String BASE_URL = "/ws/people";
public static String getEndpointURL() {
return SERVER_URL+":"+PORT+BASE_URL;
}
public static void main(String[] args) {
String endpointUrl = getEndpointURL();
System.out.println("Starting People Service...");
System.out.println("--> Published at = "+endpointUrl);
Endpoint.publish(endpointUrl, new PeopleImpl());
}
}
我该如何解决这个问题?
谢谢
答案 0 :(得分:23)
我在尝试创建一个最小的spring-boot应用程序时遇到了同样的问题。我已经将heroku的java-getting-started实现与我的比较,并找到了这个很好的修复。 只需将其添加到 src / main / resources / application.properties
即可server.port=${PORT:5000}
答案 1 :(得分:6)
我遇到了与端口绑定相同的问题。然后我找到了this很棒的文章,在那里我理解了在Heroku上部署时实际上是如何工作的。在我阅读之后,我设法在2分钟内解决了我的问题。该链接已经死亡,但找到了归档链接here。
答案 2 :(得分:1)
您必须绑定到Heroku将您指定为env var $PORT
的端口和主机0.0.0.0
。因此,您应该更改代码以包含此内容:
public static String PORT = System.getenv("PORT");
SERVER_URL
部分可能比较棘手。您可以使用0.0.0.0,但如果您确实需要可公开访问的URL,则需要设置这样的内容(将“yourappname”更改为您的应用名称):
$ heroku config:set SERVER_URL="https://yourappname.herokuapp.com"
然后添加代码:
public static String SERVER_URL = System.getenv("SERVER_URL");
答案 3 :(得分:1)
另外,我想补充一点,将以下内容添加到Procfile中,允许我将我的Spring启动应用程序部署到heroku并解决了上述异常:
worker: java $JAVA_OPTS -jar target/myTargetJar-SNAPSHOT.jar
网上列出的所有解决方案都没有帮助我解决问题,这就是我决定发布帮助我的解决方案的原因。也许它不及时,但是:)
答案 4 :(得分:1)
简单的解决方案:
web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/myapi-1.0.0.jar
用您的罐子名称替换myapi-1.0.0
或使用*
注意: 变量的顺序很重要。例如:以下无效。
web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/myapi-1.0.0.jar
答案 5 :(得分:1)
为自己尝试了一切。 @fortellao 的回答对我来说是一个救星。如果有人像我一样使用 src/main/resources/application.yml ,只需添加一点:
app:
server:
port: {$PORT}
端口:5000 在我的例子中起到了作用。
答案 6 :(得分:0)
由于这不是Spring Boot应用,因此您应该执行以下操作:
package introsde.document.endpoint;
import javax.xml.ws.Endpoint;
import introsde.assignment.soap.PeopleImpl;
public class PeoplePublisher {
public static String SERVER_URL = "http://localhost";
public String port;
public static String BASE_URL = "/ws/people";
public static String getEndpointURL() {
return SERVER_URL+":"+port+BASE_URL;
}
public static void main(String[] args) {
port = Integer.valueOf(args[0]);
String endpointUrl = getEndpointURL();
System.out.println("Starting People Service...");
System.out.println("--> Published at = "+endpointUrl);
Endpoint.publish(endpointUrl, new PeopleImpl());
}
}
然后在您的Procfile中:
web: java $JAVA_OPTS -jar target/*.jar $PORT
通过这种方式,您可以将套接字绑定到Heroku希望您监听的端口上。
答案 7 :(得分:0)
您有可能在不等待服务器完成运行的情况下发出请求,因此它中断了,因为无法在90秒之前完成构建。
猜测正在这里发生。
答案 8 :(得分:-1)
当Heroku找不到Procfile中指定的端口时,会发生此问题。
此问题的一个简单解决方案是由Procfile动态进行端口设置。
添加到Procfile中->
web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/nome_do_meu_app.jar
请记住,Maven包装应为JAR。