当前位置: 首页 > 知识库问答 >
问题:

是否可以从Spring Boot应用程序中的自动配置中排除嵌套配置?

蔚承天
2023-03-14

假设我们有一个Spring Boot应用程序和自动配置,其中定义了几个配置

@Configuration
@AutoConfigureBefore(MainAutoConfiguration.class)
public class TestAutoConfiguration {

    ....

    @Configuration
    public static class FirstNestedConfiguration {
        ...
    }

    @Configuration
    public static class SecondNestedConfiguration {
        ...
    }
}

此类通过外部库依赖项提供,并且满足所有条件,因此这些配置中的所有bean都正在加载。

然而,我需要排除FirstNestedConfiguration中提供的bean,可以这样做吗?

UPD:由于它是一个简单的Spring Boot应用程序,所以它的运行方式是

@SpringCloudApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

没有任何显式的@ComponentScan配置

共有2个答案

荣轶
2023-03-14

配置文件方法适合您吗?使用@Profile注释部分查找

 @Profile("ConfigOne")
 @Configuration

配置Spring留档

荀学文
2023-03-14

您可以在组件扫描中使用excludeFilters,如下所示:

@ComponentScan(value = {'your.package'},
    excludeFilters = @Filter(TestAutoConfiguration.class))

此外,如果要全局排除特定的自动配置,请使用属性:

spring:
  autoconfigure.exclude: your.package.TestAutoConfiguration 

但是,请注意,这样就排除了外部配置。根据这个问题,不可能排除内部配置。

 类似资料:
  • 我有一堆模块(比如3)。两个是基于Spring Boot的模块,另一个是基于Spring的模块。例如模块1-SpringBoot模块2-Spring Boot模块3-Common模块仅基于Spring 模块3@配置文件定义,只需要由模块2选择,而不是模块1。 除了放入一个不同的包之外,我知道如何在Spring Boot模块中禁用组件扫描非Spring Boot模块。我不想放不同的包裹。 任何帮助都

  • 我有多个Spring Boot Starter,每个Starter定义一个数据源,如下所示: 如您所见,bean方法是在同一配置类中的另一个bean方法中直接调用的。然而,Spring Boot正在拦截该方法,然后执行自己的内部注入。这一次,它注入了一种DataSource类型。 当应用程序使用这些启动程序之一时,它不会出现任何问题。但是,当它使用多个启动程序时,我得到如下错误: 我相信这是因为S

  • 几个月前,我在谷歌游戏中发布了一个应用程序。该应用程序有一些下载和数据从控制台谷歌用户。我将发布一个新版本,但是当我完成的时候,我想暂时删除它——保留所有的数据和下载号码。有没有可能或者当我取消发布时,所有数据都将被删除?

  • 4.1 根据条件的自动配置 @conditional是基于条件的自动配置,一般配合Condition接口一起使用,只有接口实现类返回true,才装配,否则不装配. 用实现了Condition接口的类传入@Conditional中 @Conditional可以标记在配置类的方法中,也可以标记在配置类上.标记的位置不同,作用域不同. @Conditional可以传入多个实现了condition接口的类

  • null 非常感谢你的帮助