2017-10-12 178 views
0

我无法连接到部署到AWS Elastic Beanstalk的Java应用程序的端点。该应用程序处理多个POST请求,旨在为移动应用程序提供服务,因此服务器本身没有任何静态文件。我使用Spark Java框架,当我在Localhost上测试时发现端点正确,但不在AWS Elastic Beanstalk上。将Spark-Java(Gradle,Maven)应用程序部署到AWS Elastic Beanstalk

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

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

更多细节:

我使用弹性豆茎的IntelliJ(终极)插件部署和在这一点上我测试,这是没有从直接在EB仪表盘部署一个.war不同。我已经打开所有端口和安全设置连接,以放弃任何连接问题。我相信这只是servlet没有绘制URL的问题。有什么建议么?

回答

0

将其作为本地盒子上的战争来运行,以确保您拥有正确的接线。我最近完成了这个工作 - BeanStalk上的Spark Java,但我认为我将它部署为一个jar。 Beanstalk只支持直接的java jar(用nginx指向它)。我认为当我部署为jar时,我必须做一些事情来指定Spark Java默认使用的4567的监听端口。

我已经运行Spark Java作为Tomcat中的一场战争,但我不认为在AWS上 - 我相信在那种情况下,我部署为jar。

+0

好吧,让我试试.jar –

+0

这是AWS的一个选项,更适合Spark Java。我已经在Tomcat下运行了Spark作为一场战争 - 但要记住的一点是,作为战争的Tomcat会给出一个上下文,这是您在REST API路径之前必须添加到URL的战争名称。所以如果你在8090上有blah.war,localhost:8090/blah/myrestpath,不是localhost:8090/myrestpath。 –

+0

谢谢!原来是一个端口问题。 –

0

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

相关问题