这个想法是,我想首先让@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等待调度程序完成的方法吗?