gpt4 book ai didi

java - 如何将 Jersey REST 服务器部署到 Heroku

转载 作者:行者123 更新时间:2023-12-02 00:55:00 25 4
gpt4 key购买 nike

Jersey 的“入门”示例使用 Grizzly,所以我们就采用了它。这使我们能够以相当简单的方式配置身份验证,因此:

private static final String BASE_URI = "http://localhost:8080/rest/";

// com.ourapp.AuthFilter is a javax.ws.rs.container.ContainerRequestContext
final ResourceConfig rc = new ResourceConfig(com.ourapp.AuthFilter.class).packages("com.ourapp");

// create and start a new instance of grizzly http server
// exposing the Jersey application at BASE_URI
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);

所有这些都在本地运行,这给了我们很大的希望。

遗憾的是,当我们将所有这些部署到 Heroku 时,我们遇到了 BASE_URI 的一些重大问题。我们尝试了各种各样的 URI,但在启动时却遇到了 Heroku 的运行时异常,例如:

javax.ws.rs.ProcessingException: Failed to start Grizzly HTTP server: Permission denied

javax.ws.rs.ProcessingException: Failed to start Grizzly HTTP server: Cannot assign requested address

最后,我们决定放弃 Grizzly 并尝试 Jetty 解决方案,给出 here由 Jersey 文档提供。

令人惊讶的是,文档中提供的 Maven 原型(prototype)根本无法编译,直接开箱即用。

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.28

具体:

    root.setContextPath("/");
root.setResourceBase(webappDirLocation);
server.setHandler(root);

完全未定义,并且

    server.start();

需要一个 LifeCycle 类型的参数。

那么,有人可以帮我让 Grizzly 在 Heroku 上工作吗?如果做不到这一点,谁能告诉我 Jetty 应用程序的正确配置是什么,以及如何获取 javax.ws.rs.container.ContainerRequestContext 类型的过滤器来使用 Jetty 完成其工作? p>

最佳答案

许多小时,几十种不同事物的随机组合,以及后来的大块头发......

    final String port = System.getenv("PORT");
final String baseUri = "http://0.0.0.0:" + port;
final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create(baseUri), rc);

并且在 Procfile 中:

web: java $JAVA_OPTS -Dserver.port=$PORT -cp target/classes:target/dependency/* com.ourapp.Main

这使得我们的 Heroku 在启动时为应用程序分配一个随机端口号,该端口号必须像这样传递给 Grizzly。哦,那个 0.0.0.0 的东西似乎只是没有记录。

关于java - 如何将 Jersey REST 服务器部署到 Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com