当前位置: 代码迷 >> java >> 当ComponentScanning其他@SpringBootApplications时排除SpringBootApplication
  详细解决方案

当ComponentScanning其他@SpringBootApplications时排除SpringBootApplication

热度:33   发布时间:2023-08-02 11:16:19.0

我在阻止Spring Boot自动配置某些类方面有些困难(在此示例中:SolrAutoConfiguration)。 为了说明,我建立了一个简化得多的示例:

实际上,有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);
    }
}

这将失败,因为通过@ComponentScan拾取的@SpringBootApplication任何实例(没有特定的排除)仍会加载SolrAutoConfiguration

合并多个@SpringBootApplication类时,如何正确排除自动配置类?

我已经尝试在最终的@SpringBootApplication上使用excludeFilters ,但这还没有找到解决方案。

Spring Boot 1.3.0.M3引入了使用属性排除自动配置的功能: :

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration

请注意,它应该说spring.autoconfigure.exclude ,而不是发行说明中的excludes

这有助于防止Spring Boot在存在多个@EnableAutoConfiguration / @SpringBootApplication批注的情况下加载自动配置类。

目前,我认为这是不可能的。 和问题恰恰与此问题有关。