在外部依赖准备就绪后,在应用程序启动后初始化Bean

时间:2018-01-10 07:58:06

标签: java spring

我有一个bean来启动一些amqp消费者。

这个bean在@Configuration类的构造函数中注册并初始化,如下所示:

@Autowired
ApplicationContext applicationContext

...

ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
beanFactory.registerSingleton(consumingIntegrationBeanName, consumingIntegration);
beanFactory.initializeBean(consumingIntegration, consumingIntegrationBeanName);

但是,执行此操作时启动的使用者进程依赖于在单独进程中同时启动的api。

我正在考虑做这样的事情:

while (!isInitialized) {
    Response response = httpClient.isAlive(http://api-in-separate-process/);
    if (response.status == 200) {
        beanFactory.initializeBean(consumingIntegration, consumingIntegrationBeanName);
        isInitialized = true;
    } else {
        wait 10
    }
}

但是哪里会有这样的东西?应用程序的其余部分不应受此特定bean的延迟启动的影响。

1 个答案:

答案 0 :(得分:1)

我要做的是以下事情:当“api-in-separate-process”完全启动时,我生成一种消息(例如JMS消息)。在另一个spring上下文中(应该启动使用者)我在生成的消息上放置一个监听器(例如前一句中的JMS消息)。

此侦听器在收到消息(例如JMS消息)时启动消费者

安吉洛