我正在写一个卡夫卡消费者。我需要将环境变量主题名称传递给@KafkaListener(topics = ...)。到目前为止,这是我尝试过的:

 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.springframework.stereotype.Service;

 @Service
 public class KafkaConsumer {

     @Autowired
     private EnvProperties envProperties;

     private final String topic = envProperties.getTopic();

     @KafkaListener(topics = "#{'${envProperties.getTopic()}'}", groupId = "group_id")
     public void consume(String message) {
        logger.info("Consuming messages " +envProperties.getTopic());
     }
}
我在topics = "#{'${envProperties.getTopic()}'}"行出现错误,应用程序无法启动。
如何从环境变量动态设置此主题名称?

最佳答案

通常,您不能从声明SpEL的bean中引用字段或属性。但是,@KafkaListener具有支持它的特殊语法。

See the documentation



因此,如果您将public EnvProperties getEnvProperties()添加到该类中,则类似

#{__listener.envProperties.topic}

应该管用。

10-07 16:53