Инициализация компонента 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();
            }
        }

    }
Другие вопросы по тегам