【问题标题】:Deploy Spark-Java (Gradle, Maven) application to AWS Elastic Beanstalk将 Spark-Java(Gradle、Maven)应用程序部署到 AWS Elastic Beanstalk
【发布时间】:2018-03-24 22:40:42
【问题描述】:

我无法连接到部署到 AWS Elastic Beanstalk 的 java 应用程序的端点。该应用程序处理许多 POST 请求,旨在为移动应用程序提供服务,因此服务器本身没有任何静态文件。我使用了 Spark Java 框架,当我在 Localhost 上进行测试时,它可以正确找到端点,但在 AWS Elastic Beanstalk 上却没有。

我可以将爆炸战争部署到 EB(运行 Tomcat Web 服务器)上,但我发送的所有请求都返回 404 错误:找不到资源。 Spark java 在嵌入式 Jetty 服务器上运行,因此要在 Tomcat 上运行,我按照他们的文档 (http://sparkjava.com/documentation#other-web-server) 中的建议进行操作:我已经实现了 SparkApplication 接口,将所有端点从 main() 移动到 init() 并添加了建议的代码到 web.xml 文件。

上传的 .war 包含带有 web.xml、lib(带有 gradle 库)和类(带有我的编译输出)的 META-INF。同样,没有静态文件。

更多细节:

我使用 Elastic Beanstalk IntelliJ (Ultimate) 插件进行部署,此时我测试了这与直接在 EB 仪表板上部署 .war 没有什么不同。我已在安全设置中打开所有端口和连接以丢弃任何连接问题。我相信这只是 servlet 没有映射 url 的问题。有什么建议吗?

【问题讨论】:

    标签: java amazon-web-services tomcat intellij-idea spark-java


    【解决方案1】:

    将其作为对本地机器的战争来运行,以确保您的接线正确。我最近做了这个 - Beanstalk 上的 Spark Java,但我想我将它部署为一个 jar。 Beanstalk 只支持直接的 java jar(前面是 nginx)。我想当我部署为 jar 时,我确实必须做一些事情来指定 Spark Java 默认使用的监听端口 4567。

    我也在 Tomcat 中运行 Spark Java 作为战争,但我不认为在 AWS 上 - 我相信在这种情况下我部署为 jar。

    【讨论】:

    • 好的,让我试试.jar
    • 这是 AWS 的一个选项,对于 Spark Java 来说更自然。不过,我已经在 Tomcat 下将 Spark 作为战争运行 - 要记住的一件事是,战争 tomcat 将提供一个上下文,即您必须在 REST api 路径之前添加到 URL 的战争名称。因此,如果您在 8090 上有 blah.war,则为 localhost:8090/blah/myrestpath,而不是 localhost:8090/myrestpath。
    • 谢谢!原来是端口问题。
    【解决方案2】:

    解决了!我在更改端口的主类中有代码。虽然这是在本地环境中运行所必需的,但它与自动分配端口的 AWS 冲突。

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 2018-12-07
      • 2022-06-11
      • 2018-04-21
      • 2017-04-14
      • 2016-09-05
      • 2015-07-17
      • 2020-07-05
      • 2013-03-18
      相关资源
      最近更新 更多