在Spring应用程序中同时使用Vaadin和Spring WebFlux,如何设置路由?

时间:2017-09-16 20:14:22

标签: java spring spring-boot vaadin spring-webflux

我正在使用Spring Boot 2.0启动一个新的Web应用程序。我想用Vaadin 8来提供UI。另外,我想使用Spring 5提供的WebFlux框架提供API接口。

但是,似乎在我的build.gradle中包含Vaadin会导致我的WebFlux路由被忽略:

    compile('com.vaadin:vaadin-spring-boot-starter')

当我配置Vaadin时,我发现它可能是在启动时自行配置的:

2017-09-16 16:04:52.332  INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration     : Registering Vaadin servlet
2017-09-16 16:04:52.333  INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration     : Servlet will be mapped to URLs [/vaadinServlet/*, /VAADIN/*]
2017-09-16 16:04:52.356  INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration     : Setting servlet init parameters
2017-09-16 16:04:52.356  INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration     : Set servlet init parameter [productionMode] = [false]
2017-09-16 16:04:52.357  INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration     : Set servlet init parameter [resourceCacheTime] = [3600]
2017-09-16 16:04:52.357  INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration     : Set servlet init parameter [heartbeatInterval] = [300]
2017-09-16 16:04:52.357  INFO 19413 --- [ost-startStop-1] c.v.s.b.i.VaadinServletConfiguration     : Set servlet init parameter [closeIdleSessions] = [false]
2017-09-16 16:04:52.441  INFO 19413 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2017-09-16 16:04:52.444  INFO 19413 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'springVaadinServlet' to [/vaadinServlet/*, /VAADIN/*]

当我删除Vaadin时,我看到我的WebFlux路由已配置:

2017-09-16 16:07:51.434  INFO 19441 --- [  restartedMain] o.s.w.r.f.s.s.RouterFunctionMapping      : Mapped (Accept: [application/json] && /api) -> /document -> org.springframework.web.reactive.function.server.RouterFunction$$Lambda$203/43414926@76ae76e8

我认为Vaadin不活跃。似乎Vaadin Spring Boot入门套件覆盖了所有内容。

我尝试将@SpringUI组件的路径更改为不在根目录,但这并没有改变任何内容。

我也试过这个:

@WebServlet(value = "/myspringuis/*", asyncSupported = true)
public class MySpringServlet extends SpringVaadinServlet {
}

我不明白SpringVaadinServlet究竟如何适应这一点,但怀疑它与我的问题有关。

是否可以同时使用Vaadin和WebFlux?显然,我想分开路线,并且让WebFlux处理/ api / *和Vaadin处理其他所有内容。

1 个答案:

答案 0 :(得分:1)

vaadin-spring-boot-starter最有可能带来spring-boot-starter-web(带来一个Servlet容器并配置Spring MVC)。

您不能在同一个应用程序中配置Spring MVC和Spring WebFlux。