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

时间:2017-10-12 16:38:51

标签: java spring-boot spring-webflux

我有Spring Boot(2.0.0 M5)应用程序,它提供了一些REST API。我想使用RouterFunction s。

来实现此API

虽然我使用嵌入式Jetty运行应用程序,但一切正常。

当我将应用程序转换为WAR文件(在documentation here之后)并将其部署到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
   }
}

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

有没有人遇到过类似的问题?您可以找到代码here

2 个答案:

答案 0 :(得分:1)

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

你总是可以在the Spring Boot issue tracker上创建一个问题,但我不确定这是否会实现,因为部署到Servlet容器不是那里的主要关注点(你不能用Netty做到这一点)

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

答案 1 :(得分:0)

现在进行回答,以防其他人仍然面临这个问题。

在POM文件中,您需要排除netty并单独添加tomcat。

compile ('org.springframework.boot:spring-boot-starter-webflux') {
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter- 
    reactor-netty'
}
compile 'org.springframework.boot:spring-boot-starter-tomcat'

请检查链接以获取完整代码:https://github.com/sushantkr16/Spring-boot2-webflux-annotation