Java 当外部依赖项就绪时,在应用程序启动后初始化Bean

Java 当外部依赖项就绪时,在应用程序启动后初始化Bean,java,spring,Java,Spring,我有一个启动一些amqp消费者的bean 此bean在@Configuration类的构造函数中注册和初始化,如下所示: @Autowired ApplicationContext applicationContext ... ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory(); beanFactory.regi

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

此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延迟启动的影响。

我要做的是:当“单独进程中的api”完全启动时,我生成一种消息(例如JMS消息)。在另一个spring上下文(应该启动使用者)中,我在生成的消息上放置了一个侦听器(例如,前一句中的JMS消息)

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


Angelo

为什么不使用spring事件并在使用spring服务启动完整的spring上下文之后启动使用者?启动运行使用者的上下文时,我不确定运行“api在单独进程中”的上下文我想我需要一些每10秒运行一次的计划任务,直到bean被初始化。当“单独进程中的api”启动时,您可以生成一个自定义事件,并在该事件上放置一个侦听器。当侦听器获取此自定义事件时,它将启动consumerHow您建议我这样做吗。我无法控制哪个流程首先开始,因此“单独流程中的api”也可能是最先完成的。