我有一个使用Spring Boot框架的Web应用程序,它提供了rest服务。
我在思考如何正确地管理过滤器上的配置文件。 实际上,我的应用程序有2个配置文件:dev和prod(你可以猜出它们代表什么...)
在生产模式下,我需要启用比在开发模式下更多的过滤器。
我的过滤器配置类如下:
@Configuration
public class FiltersConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean(CompositeFilter compositeFilter){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setFilter(compositeFilter);
return filterRegistrationBean;
}
@Bean
@Profile("dev")
public CompositeFilter devCompositeFilter(){
CompositeFilter compositeFilter = new CompositeFilter();
List<Filter> filtersList = new ArrayList<>();
//filtersList.add(filter1());
compositeFilter.setFilters(filtersList);
return compositeFilter;
}
@Bean
@Profile("prod")
public CompositeFilter prodCompositeFilter(){
CompositeFilter compositeFilter = new CompositeFilter();
List<Filter> filtersList = new ArrayList<>();
//filtersList.add(filter1());
compositeFilter.setFilters(filtersList);
return compositeFilter;
}
}
我的问题是:
- 在方法上添加@Profile是一种好的实践吗?
- 有没有办法强制编译器排除那些被注解为与当前配置文件不同的profile的类、方法等? (我不想让生产环境的jar/war文件受到不必要的代码影响!)
- Spring Boot提供了更清晰的组织profile的方式吗?