什么是使用AbstractReactiveWebInitializer的正确方法

时间:2018-10-12 17:37:41

标签: spring-boot spring-webflux

我有一个Spring WebFlux应用程序作为独立的Spring Boot应用程序成功运行。

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

@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,没有一个自动配置的Spring Boot类(Cloud Config,DataSource等)启动。

documenation指出这是我需要实现的类,我只是期望其余的Spring环境能够“正常工作”。


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


编辑:

经过一些额外的研究,我将其范围缩小到了Cloud Config。在启动时进行bean后处理期间,ConfigurationPropertiesBindingPostProcessor应该使用其他属性源(来自云配置)进行充实,但是它似乎是默认的Spring属性,而没有其他源。

misisng属性导致下游bean失败。

1 个答案:

答案 0 :(得分:1)

Spring Boot does not support WAR packaging for Spring WebFlux applications

您要参考的文档是Spring Framework文档; Spring Framework确实支持该用例,但没有Spring Boot。