Инициализация компонента Spring профилем не работает
У меня есть класс ниже, который должен быть инициализирован, только если активный профиль не является основным. Но он выполняется, даже если активный профиль является главным. Как это реализовать? Я использую Spring boot и Spring 4.
@Component
@Scope(value= "singleton")
@Profile("!master")
public final class SystemStartUp implements ApplicationListener<ContextRefreshedEvent>, Ordered {
}
2 ответа
Решение
Там нет поддержки для @Profile
для ApplicationListener или @EventListener
в этом отношении. @Profile
в основном используется в сочетании с @Configuration
,
Когда Spring видит класс, который реализует интерфейс ApplicationListener, он автоматически регистрирует слушателя.
Если вы хотите выполнить некоторые условно-зависимые действия при запуске вашей системы, вы можете изучить различные подходы.
Я достиг решения программно.
public void onApplicationEvent(ContextRefreshedEvent event) {
Environment env = ApplicationContextProvider.getApplicationContext().getBean(Environment.class);
if(env.getActiveProfiles() != null) {
if(env.getActiveProfiles().length == 1 && Arrays.binarySearch(env.getActiveProfiles(), "master") == -1 ) {
initialize();
}
}
}