AbstractReactiveWebInitializer 的正确使用方法是什么

What Is the Correct Way To Use AbstractReactiveWebInitializer

我有一个 Spring WebFlux 应用程序 运行 作为独立 spring 引导应用程序成功运行。

我正尝试在 Tomcat 容器中 运行 相同的应用程序,并且根据文档,我创建了一个扩展 AbstractReactiveWebInitializer 的 class。 class 要求我实现一个方法 getConfigClasses,该方法 return class 通常用 @Configuration 注释。如果工作 spring 启动应用程序以名为 ApplicationInitializer 的 class 启动,那么最终实现将如下所示:

@SpringBootApplication(scanBasePackages = "my.pkg")
@EnableDiscoveryClient
@EnableCaching
public class ApplicationInitializer {
    public static void main(String... args) {
        SpringApplication.run(ApplicationInitializer.class, args);
    }
}

public class ServletInitializer extends AbstractReactiveWebInitializer {
    @Override
    protected Class<?>[] getConfigClasses() {
        return new Class[] {ApplicationInitializer.class};
    }
}

部署后,唯一启动的是 ApplicationInitializer、none 的自动配置 Spring 启动 classes(云配置、数据源等)永远启动关闭。

documenation 声明这是我需要实施的 class,我只是希望 spring 环境的其余部分为 "just work"。


我应该如何使用此 class 将 Reactive WebFlux Spring 引导应用程序部署到 Tomcat 容器?


编辑:

经过一些额外的研究,我将范围缩小到可能只是云配置。在启动 bean post 处理期间,ConfigurationPropertiesBindingPostProcessor 应该使用额外的 属性 源(来自云配置)来丰富,但它似乎是默认的 Spring 属性,没有其他来源。

错误的属性导致下游 bean 失败。

Spring Boot does not support WAR packaging for Spring WebFlux applications.

您所指的文档是 Spring 框架文档; Spring 框架确实支持该用例,但没有 Spring Boot.

您可以扩展 SpringBootServletInitializer,在 onStartup 方法上添加响应式 servlet