6

我在阻止 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,但这还没有导致解决方案。

4

2 回答 2

16

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注释的情况下加载自动配置类。

于 2015-08-11T13:54:39.263 回答
3

目前我认为这是不可能的。问题gh-2939gh-2435与此问题完全相关。

于 2015-07-27T18:54:14.913 回答