@KafkaListener 动态指定topic

  背景:   使用 @org.springframework.kafka.annotation.KafkaListener 的时候,kafka的topic可以自行设定,但是有种需求是,在启动之前,是不知道需要监听哪个topic的,需要在启动的时候,根据环境变量的输入来决定监听哪个topic.

正常使用的方式可能是如下的样子:

@org.springframework.kafka.annotation.KafkaListener(topics = "myTopic")
public void process(String content) {
        //TODO
}
那么怎么让myTopic变成动态输入的呢?
  1.   在配置文件中新增配置:  topicName:  defaultname
  2.   修改原先的代码为:  
  3. @org.springframework.kafka.annotation.KafkaListener(topics = "${topicName}")
    public void process(String content) {
            //TODO
    }
  4.   添加动态配置代码如下:那么在运行的时候,KafkaConfiguration设置的topicName将会被 @KafkaListener使用到
@Configuration
public class KafkaConfiguration implements InitializingBean {
    /**
     * 日志
     */
    private static final Logger logger = LoggerFactory.getLogger(KafkaConfiguration.class);

    @Override
    public void afterPropertiesSet() throws Exception {
        String logicTopicName = someKindOfLocalLogic();
        System.setProperty("topicName", logicTopicName);
        logger.info("#########  system config topic:{} ########", logicTopicName);
    }
}

你可能感兴趣的:(java)