当ComponentScanning其他@SpringBootApplications时,SpringBootApplication排除
我在阻止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); } }
这失败了,因为在没有特定排除的情况下通过@ComponentScan
获取的@SpringBootApplication
任何实例仍然加载SolrAutoConfiguration
。
在组合多个@SpringBootApplication
类时,如何正确排除自动配置类?
我已经尝试在最终的@SpringBootApplication
上使用excludeFilters
,但这还没有找到解决方案。
Spring Boot 1.3.0.M3引入了使用属性排除自动配置的function: 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类。
目前我认为这是不可能的。 问题gh-2939和gh-2435恰好涉及这个问题。