Я занимаюсь разработкой приложения для Springboot, которое зависит от другого приложения для Springboot. Я хочу включить большинство компонентов в родительское приложение Springboot, кроме одного.
Как можно исключить один bean-компонент Springboot, который родительский пакет сканировал, не затрагивая класс ParentApplication?
Способы, которые я пробовал, но не работает:
1: использование фильтрации исключений в моем классе приложения для фильтрации конкретного класса бинов.
2: Я также пытался исключить и класс компонента, и класс родительской конфигурации.
3: добавить интерфейс 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.");
}
}
my 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, так же как и класс, который я хочу исключить.