我有一个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失败。
答案 0 :(得分:1)
Spring Boot does not support WAR packaging for Spring WebFlux applications。
您要参考的文档是Spring Framework文档; Spring Framework确实支持该用例,但没有Spring Boot。