Идея заключается в том, что я хотел бы сначала позволить @Scheduled
методу извлекать некоторые данные и только после завершения этого процесса включить / инициализировать мой @KafkaListener
. В настоящее время слушатель Kafka запускается сразу, не дожидаясь завершения работы планировщика.
Я пытался использовать @Conditional
с пользовательским условием, но это выполняется только при создании контекста (или при запуске). Также @ConditionalOnBean
не работал, потому что фактически мой bean-компонент Scheduler уже создан до того, как завершит процесс.
Вот так выглядит моя установка.
Слушатель Кафки:
@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
}
}
Есть ли какой-нибудь приятный Spring способ дождаться окончания работы планировщика перед инициализацией KafkaMessageHandler
?