我想从 Spring MVC 迁移到 Spring Webflux,但是我从 3rd 方使用了一些 servlet 过滤器和 web servlet,必须迁移到它们的等效 Webflux 版本。
但这不切实际,因为它们来自 3rd 方框架。
例如:H2服务器WebServlet
和 MetricsServlet
和 InstrumentedFilter
.
有什么方法可以将 servlet 或 servlet 过滤器转换为其等效的 Webflux 版本?
最佳答案
您可以使用 tomcat 作为 webflux 实现(您可以通过排除 netty starter 并包括 tomcat starter 来实现)。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>${spring-boot.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
您可以通过创建
WebServerFactoryCustomizer<TomcatReactiveWebServerFactory>
来添加 servlet 过滤器。 bean 并通过 Context
添加过滤器界面。例如:@Bean
public WebServerFactoryCustomizer<TomcatReactiveWebServerFactory> customizer() {
return factory -> factory.addContextCustomizers(
context -> {
FilterDef filterDef = new FilterDef();
filterDef.setFilterName("name");
filterDef.setFilter(new SomeFilter());
FilterMap filterMap = new FilterMap();
filterMap.setFilterName("name");
filterMap.addURLPattern("/url/pattern");
context.addFilterMap(filterMap);
context.addFilterDef(filterDef);
}
);
}
配置为 webflux“实现”时 tomcat Servlet 的默认名称是
httpHandlerServlet
关于java - 我们可以在 Spring Webflux 中使用 web servlet 和 servlet 过滤器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48665814/