小编典典

当ComponentScanning其他@SpringBootApplications时排除SpringBootApplication

spring-boot

我在阻止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在final上进行工作@SpringBootApplication,但这还没有找到解决方案。


阅读 773

收藏
2020-05-30

共1个答案

小编典典

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批注的情况下加载autoconfig类。

2020-05-30