防止自动配置所有包含的Spring Cloud依赖项

问题描述

在Spring Boot中排除几个AutoConfiguration类很容易。只需将其从应用程序中排除即可:

@SpringBootApplication(exclude = {
        org.springframework.cloud.autoconfigure.RefreshAutoConfiguration.class,org.springframework.cloud.openfeign.FeignAutoConfiguration.class,})

但是如何在不将所有Spring Clouds AutoConfiguration添加到排除项的情况下排除包org.springframework.cloud中的所有AutoConfiguration呢?如果不是一百个条目,那将是几十个。而且,随着每一个新的Spring Cloud版本的出现,新的AutoConfiguration类都将成为未来的证明。

仅当未使用@ComponentScan@SpringBootApplication时,才使用@EnableAutoConfiguration。但这也将删除所有便利的自动配置功能

有没有办法以编程方式实现这一目标?又如何?


不幸的是,从应用程序中删除Spring Clouds依赖项不是可行的解决方案。

解决方法

为什么要从自动配置中排除所有类?

“自动配置”中的大多数bean是@conditional,如果您提供自己的豆,则不会创建它们。

无论如何,您都可以查看AutoConfigurationImportSelector。到目前为止,Spring Boot只允许@EnableAutoConfigurtion的类和名称排除在外。如果要编写自定义“ AutoConfigurationImportSelector”,则可以在编写自己的扩展接口以使EnableAutoConfiguration编写包方法之后,通过包对子类进行过滤并按包过滤。

正如我提到的那样,这将是我最后要做的事情。只需检查@conditional依赖项以进行自动配置,并提供自己的bean是更好的解决方案。