別の springboot アプリケーションに依存する springboot アプリを開発しています。ほとんどの Bean を親の springboot アプリに含めたいのですが、1 つだけです。
ParentApplication クラスに触れずに、親パッケージがスキャンした 1 つの 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");
}
コンソールに「構成クラスが作成されました」と出力されるため、何らかの理由で ParentApplication が springboot によって開始され、除外したいクラスも開始されます。