Spring App具有用于配置文件的不同WebAppInitializers

时间:2018-08-08 23:32:50

标签: spring spring-java-config spring-profiles

我需要根据当前的弹簧配置文件运行其他初始化程序

即开发产品

当前我有2个类,每个初始化器一个,但是当我部署应用程序时,两个类都被执行了,我怎么只让一个基于配置文件的类运行?

这是执行env.getActiveProfiles()时获得的当前配置文件。

Profile : dev

  • 对于Dev初始化程序来说,

    @Profile("dev") public class DevInitializer implements WebApplicationInitializer { ..}

  • 对于Prod来说,它就像dev,但是有过滤器

    @Profile("prod") public class ProdInitializer implements WebApplicationInitializer { .... Add some Filters }

1 个答案:

答案 0 :(得分:1)

您不需要单独的Webapp初始化程序。过滤器是使用Java配置添加的,您可以具有特定于配置文件的@Bean方法,也可以为不同的配置文件指定完全不同的配置类。

如果还没有,请像这样制作一个Configuration类:

@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {

    // make one of these for each filter to be added in prod only
    @Profile("prod")
    @Bean 
    public FilterRegistrationBean someFilterRegistration(SomeFilter someFilter) {
        FilterRegistration registration = new FilterRegistrationBean();
        registration.setFilter(someFilter);
        registration.setName("someFilter");
        registration.setOrder(1); // order in which filter takes effect in chain
        return registration;
    }
}

仅针对您指定的配置文件添加过滤器。