Как инициализировать / включить Bean после завершения другого процесса? - PullRequest
0 голосов
/ 17 мая 2019

Идея заключается в том, что я хотел бы сначала позволить @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?

...