Spring Web Reactive不能作为Tomcat 8.5上部署的war文件运行

bel*_*elo 7 java spring-boot spring-webflux

我有Spring Boot(2.0.0 M5)应用程序,它提供了一些REST API.我想用RouterFunctions 实现这个API .

当我使用嵌入式Jetty运行app时,一切正常.

当我将应用程序转换为WAR文件(此处的文档)并将其部署到Tomcat 8.5时,我总是404在尝试调用任何端点时获得.

我可以在日志中看到端点被识别:

[ost-startStop-1] s.w.r.r.m.a.RequestMappingHandlerMapping : Mapped "{[/say-hello],methods=[GET]}" onto java.lang.String com.example.demo.DemoController.test()
[ost-startStop-1] o.s.w.r.f.s.s.RouterFunctionMapping: Mapped /api => {
    /v1 => {
       /status -> 
          com.example.demo.DemoApplication$$Lambda$189/1904651750@5fdc83e
   }
}
Run Code Online (Sandbox Code Playgroud)

但是在调用时curl -v http://localhost:8080/demo/say-hello或者curl -v http://localhost:8080/demo/api/v1/status我看到默认的Tomcat 404页面.路径是正确的,我demo.war在部署它之前重命名.war .

有没有人遇到类似的问题?你可以在这里找到代码.

Bri*_*zel 1

恐怕目前 Spring Boot for WebFlux 不支持 WAR 部署模型。Spring Framework 确实支持该模型(尽管我不确定它是否支持将应用程序部署到非根上下文)。

您始终可以在Spring Boot 问题跟踪器上创建问题,但我不确定这是否会实现,因为部署到 Servlet 容器并不是那里的主要焦点(并且您不能使用 Netty 做到这一点)。

快速说明:添加@EnableWebFlux是一个信号,表明您希望将 WebFlux 配置掌握在自己手中,并且 Spring Boot 不应在该空间中为您自动配置内容。