0

我正在开发一个依赖于另一个 springboot 应用程序的 springboot 应用程序。我想在父 springboot 应用程序中包含大多数 bean,但只有一个。

如何在不触及 ParentApplication 类的情况下排除父包已扫描的一个 springboot bean?

我尝试过但不起作用的方法:

1:在我的应用程序类中使用排除过滤来过滤掉特定的bean类。

2:我也试过同时排除bean类和父配置类。

3:在我要排除的bean类中添加DisposableBean接口,在运行时销毁。

下面是我的应用程序启动配置类和父类。

我的 MyApplication.class:包 com.myapp;

@ComponentScan(
    basePackages = {"com.parent",{my own packages..}},
    excludeFilters= {
    @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value= {TheClassToExclude.class}),
    @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value= {ParentApplication.class})}   
)
@SpringBootApplication(exclude=ParentApplication.class)
public class MyApplication{

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

@PostConstruct
public void init() {
    System.out.println("App is initialized.");
}

}

我的 ParentApplication.class

    package com.parent;


    @EnableRetry
    @EnableScheduling
    @SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class })
    @ComponentScan(basePackages = {all the base package including the TheClassToExclude}
    @PropertySource({all resources})
    public class ParentApplication {

    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    @PostConstruct
    public void haha() {
        System.out.println("configuration class created");
    }

控制台打印出来:“configuration class created”,所以ParentApplication是springboot出于某种原因发起的,所以我要排除的Class也是。

4

1 回答 1

0

仅供参考-我认为由于这两个类都带有注释@SpringBootApplication,因此都是两个@Configuration类并将参与自动 Spring 组件扫描-目前尚不清楚这些类中的哪一个将首先被扫描以“排除”另一个一个 - 除非...您明确指定入口点,因此,第一个 SpringBootApplication 类要像这里一样加载

您可以通过在 application.properties 中设置 logging.level.org.springframework=DEBUG 查看 Spring 组件扫描实例化哪些类以及以什么顺序实例化

于 2021-08-13T09:11:17.813 回答