在实践中,我将Spring Boot应用程序部署到AWS Elastic Beanstalk环境。我已经能够在本地运行该应用程序。由于Spring Boot附带了内置的Tomcat,因此我使用了Java AWS环境(而不是Tomcat环境)。在日志中,看起来应用程序正在正常启动。但是,出于某种原因,当我导航到根页面(映射到index.html)时,我收到以下错误:
(new System.Collections.Generic.Dictionary<string, object>(row1 as System.Collections.Generic.Dictionary<string, object>))
This application has no explicit mapping for /error, so you are seeing this as a fallback.
几乎任何映射都会发生这种情况。我再次不在我的本地服务器上出现此问题。我的视图解析器如下
Sun Jan 07 18:22:33 UTC 2018
There was an unexpected error (type=Not Found, status=404).
/WEB-INF/index.html
在我看来,好像解析器正在挑选正确的路径;一旦我将其部署到EC,路径是否会改变?在您的回复中,请像初学者一样对待我。
答案 0 :(得分:0)
我设法找到了另一种部署方法:将应用程序包含在内,然后将其部署到AWS docker环境中。如果您在尝试部署Spring Boot应用程序时遇到此404问题,那么对其进行补救可能需要花费更多精力来解决问题。我之前从未使用Docker化应用程序,但这样做最终变得相当简单。
TL; DR:不要尝试将Spring Boot App部署到Tomcat或Java AWS环境。对其进行包含并使用Docker AWS环境。
编辑:我几个月后回顾这篇文章并获得了一些新知识:值得注意的是,这只能起作用,因为我的docker build命令包含了容器中的WEB-INF内容(因为它包含了传递中的所有内容)上下文)。答案 1 :(得分:0)
您收到404错误的原因是您部署到Elastic Beanstalk的jar文件不包含WEB-INF文件夹。更正问题,您可以执行以下操作(我假设您使用的是gradle;如果需要,您可以搜索maven等效项):
您可能需要执行一些进一步调整才能解决问题。但是在一天结束时,您应该能够查看“war”文件并查看WEB-INF文件夹的内容。一旦你管理了它并且可以在本地运行可执行文件(比如java -jar app.war),那么你应该能够将它成功部署到AWS。同样值得注意的是,在尝试运行战争之前,你想要在里面战争文件夹中。否则,您的运行将通过上下文从本地系统中获取WEB-INF内容。