错误R10(启动超时) - > Web进程在启动后60秒内无法绑定到$ PORT - Heroku

时间:2015-12-03 13:06:24

标签: java heroku soap

我正在尝试在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());
}
}

我该如何解决这个问题?

谢谢

9 个答案:

答案 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。