我正在开发一个依赖于另一个 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也是。