代码之家  ›  专栏  ›  技术社区  ›  ip696

如果kafka中不存在属性中的kafka主题名,如何中断启动spring启动应用程序?

  •  0
  • ip696  · 技术社区  · 7 年前

    我试着查看关于startup 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."); 此异常被忽略,应用程序继续工作。

    0 回复  |  直到 7 年前
        1
  •  1
  •   Gary Russell    7 年前

    而不是 ApplicationRunner 使生效 SmartLifecycle 具有 autoStartup=true 把你的逻辑放进去 start() .