在 Spring 应用程序中同时使用 Vaadin 和 Spring WebFlux,如何设置路由?
Using both Vaadin and Spring WebFlux in a Spring application, how can I set up routes?
我正在使用 Spring Boot 2.0 启动一个新的 Web 应用程序。我想使用 Vaadin 8 来提供 UI。此外,我想提供一个 API 使用 WebFlux 框架 Spring 5 提供的接口。
但是,在我的 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$$Lambda3/43414926@76ae76e8
我没有看到 Vaadin 处于活动状态。似乎 Vaadin Spring 引导启动程序包覆盖了所有内容。
我尝试将我的@SpringUI 组件的路径更改为不在根目录,但这并没有改变任何东西。
我也试过这个:
@WebServlet(value = "/myspringuis/*", asyncSupported = true)
public class MySpringServlet extends SpringVaadinServlet {
}
我不明白 SpringVaadinServlet 如何适合这个,但怀疑它与我的问题有关。
是否可以同时使用Vaadin和WebFlux?显然,我想分开路由,让 WebFlux 处理 /api/* 并让 Vaadin 处理其他所有内容。
vaadin-spring-boot-starter
最有可能带来spring-boot-starter-web
(带来Servlet容器并配置Spring MVC)。
您不能在同一应用程序中同时配置 Spring MVC 和 Spring WebFlux。
我正在使用 Spring Boot 2.0 启动一个新的 Web 应用程序。我想使用 Vaadin 8 来提供 UI。此外,我想提供一个 API 使用 WebFlux 框架 Spring 5 提供的接口。
但是,在我的 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$$Lambda3/43414926@76ae76e8
我没有看到 Vaadin 处于活动状态。似乎 Vaadin Spring 引导启动程序包覆盖了所有内容。
我尝试将我的@SpringUI 组件的路径更改为不在根目录,但这并没有改变任何东西。
我也试过这个:
@WebServlet(value = "/myspringuis/*", asyncSupported = true)
public class MySpringServlet extends SpringVaadinServlet {
}
我不明白 SpringVaadinServlet 如何适合这个,但怀疑它与我的问题有关。
是否可以同时使用Vaadin和WebFlux?显然,我想分开路由,让 WebFlux 处理 /api/* 并让 Vaadin 处理其他所有内容。
vaadin-spring-boot-starter
最有可能带来spring-boot-starter-web
(带来Servlet容器并配置Spring MVC)。
您不能在同一应用程序中同时配置 Spring MVC 和 Spring WebFlux。