GAE 不支持 Spring Boot Jetty,但导致我的测试在删除时失败?



我正在使用Spring Boot构建一个API,该API正在与Travis CI一起部署到Google App Engine。

我从Google的Starter Project(https://github.com/GoogleCloudPlatform/getting-started-java/tree/master/appengine-standard-java8/springboot-appengine-standard(开始了我的代码,该项目不使用spring-boot-starter-jetty依赖项。因此,我的项目也不需要它,并且一切都部署得很好。

直到我决定添加一个测试,该测试使用 Spring 的TestRestTemplate.getForEntity()方法来达到我可以断言的基本端点,只是为了让我安心,该端点可以端到端地到达。但是,在本地运行测试时出现以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
[stacktrace]
Caused by: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
[stacktrace]
Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

环顾四周,很明显我应该添加spring-boot-starter-jetty,测试开始通过!一切看起来都很好。

但是,在提交并部署到 GAE 后,我现在在尝试命中终结点时收到 500 错误。 我在 Stackdriver 中做了一些挖掘,这是抛出的错误:

java.lang.RuntimeException: javax.servlet.ServletException: Not running on Jetty, JSR-356 support unavailable

我假设 JSR-356 支持是spring-boot-starter-jetty所必需的,我认为 GAE 不支持,因此出现了错误。我在这里向上游报告了这个:https://issuetracker.google.com/issues/79235250

有没有办法在没有 JSR-356 支持的情况下添加依赖项,或者有没有另一种方法可以让某种形式的 HTTP 端到端测试通过?

您可以在此处查看我的源代码:https://github.com/bytelucas/nohold - 有问题的测试是HTTPRequestTest.java

看起来 Spring boot 默认启动器码头为 9.1,您能否尝试通过添加它(在 POM 中(来覆盖早期版本的码头的默认值,它使用 JSR-353 看看这是否能解决问题。

相关内容

  • 没有找到相关文章

最新更新