另一个进程完成后如何初始化/启用Bean?

时间:2019-05-17 14:07:44

标签: spring initialization conditional scheduled-tasks

这个想法是,我想首先让@Scheduled方法检索一些数据,并且仅在该过程完成后才启用/初始化我的@KafkaListener。目前,Kafka监听器无需等待调度程序完成即可立即启动。

我尝试将@Conditional与自定义条件一起使用,但这仅在上下文创建(即启动)时执行。另外,@ConditionalOnBean无效,因为实际上我的Scheduler bean已在完成该过程之前创建。

这是我的设置的样子。 卡夫卡听众:

@Service
class KafkaMessageHandler(private val someRepository) {

    @KafkaListener(topics = ["myTopic"])
    fun listen(messages: List<ConsumerRecord<*, *>>) {
         // filter messages based on data in someRepository
         // Do fancy stuff
    }
}

计划程序:

@Component
class Scheduler(private val someRepository) {

    @Scheduled(fixedDelayString = "\${schedule.delay}")
    fun updateData() {
         // Fetch data from API
         // update someRepository with this data
    }
}

在初始化KafkaMessageHandler之前,有什么不错的Spring等待调度程序完成的方法吗?

0 个答案:

没有答案