我正在开发依赖于另一个springboot应用程序的springboot应用程序。我想将大多数bean包含在父springboot应用程序中,但其中一个。
如何在不触摸ParentApplication类的情况下排除父包已扫描的一个springboot bean?
我已经尝试过但无法正常工作的方式:
1:在我的应用程序类中使用排除过滤来过滤掉特定的bean类。
2:我还试图同时排除bean类和父配置类。
3:将DisposableBean接口添加到我想在运行时排除并销毁它的bean类。
下面是我的应用程序启动程序配置类和父类。
我的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");
}
控制台将打印出:“已创建配置类”,因此出于某种原因,parentApplication是由springboot启动的,因此我要排除的类也是如此。