我在阻止Spring Boot自动配置某些类方面有些困难(在此示例中:SolrAutoConfiguration)。为了说明,我建立了一个简化得多的示例:
https://github.com/timtebeek/componentscan-exclusions
实际上,有20多个内部@SpringBootApplication
项目,每个项目都有各自的依赖项。 (不是理想的/不是我的主意,但是很难摆脱现在。)
出现问题是因为多个子项目正在使用Solr 5.2.1,但是Spring Boot仅与4.x兼容。在最终应用程序中(本例中为module-b),我想跨所有模块导入所有@SpringBootApplication
类,同时阻止SolrAutoConfiguration
运行:
@ComponentScan("project") // Broad scan across all company jars
@SpringBootApplication(exclude = { SolrAutoConfiguration.class }) // Failing exclude
public class ModuleBApp {
public static void main(final String[] args) {
SpringApplication.run(ModuleBApp.class, args);
}
}
这将失败,因为在没有特定排除的情况下通过
@SpringBootApplication
拾取的任何@ComponentScan
实例仍会加载SolrAutoConfiguration
。合并多个
@SpringBootApplication
类时,如何正确排除自动配置类?我已经尝试在最终的
excludeFilters
上使用@SpringBootApplication
了,但这还没有找到解决方案。 最佳答案
Spring Boot 1.3.0.M3引入了使用属性排除自动配置的功能:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.3.0-M3-Release-Notes
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration
请注意,它应该说
spring.autoconfigure.exclude
,而不是发行说明中的excludes
。这有助于防止Spring Boot在存在多个
@EnableAutoConfiguration
/ @SpringBootApplication
批注的情况下加载自动配置类。