Как я могу прервать запуск приложения весенней загрузки, если имя темы kafka из свойств не существует в kafka? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь проверить темы Кафки при запуске Spring-boot приложения.Я хочу выбросить исключение и прервать запуск.Это мой конфиг:

@Slf4j
@Configuration
public class KafkaTopicConfig implements ApplicationRunner {

    private final KafkaAdmin kafkaAdmin;
    private final TopicProperties topicProperties;

    public KafkaTopicConfig(KafkaAdmin kafkaAdmin, TopicProperties topicProperties) {
        this.kafkaAdmin = kafkaAdmin;
        this.topicProperties = topicProperties;
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        AdminClient admin = AdminClient.create(kafkaAdmin.getConfig());

        ListTopicsResult listTopicsResult = admin.listTopics();
        listTopicsResult.names().whenComplete((existTopics, throwable) -> {
            log.info("TOPICS LOAD: {}", existTopics.size());
            topicProperties.getTopics().forEach((s, topic) -> {
                if (!existTopics.contains(topic))
                    throw new IllegalStateException("Topic with name: " + topic + " not found in kafka.");
            });
        });
    }
}

Но после бросков throw new IllegalStateException("Topic with name: " + topic + " not found in kafka."); это исключение игнорируется и приложение продолжает работать.

1 Ответ

0 голосов
/ 02 апреля 2019

Вместо ApplicationRunner, реализуйте SmartLifecycle с autoStartup=true и поместите свою логику в start().

...