Cod*_*ool 9 java spring-el spring-boot kafka-consumer-api spring-kafka
我正在写一个 Kafka 消费者。我需要将环境变量主题名称传递给@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());
}
}
Run Code Online (Sandbox Code Playgroud)
我在线路上遇到错误topics = "#{'${envProperties.getTopic()}'}",应用程序无法启动。
如何从环境变量动态设置此主题名称?
通常,您不能引用声明 SpEL 的 bean 中的字段或属性。然而,@KafkaListener有特殊的语法来支持它。
从版本 2.1.2 开始,SpEL 表达式支持一个特殊的标记
__listener,它是一个伪 bean 名称,表示此注释所在的当前 bean 实例。
所以,如果你添加public EnvProperties getEnvProperties()到类中,那么类似
#{__listener.envProperties.topic}
Run Code Online (Sandbox Code Playgroud)
应该管用。
| 归档时间: |
|
| 查看次数: |
3357 次 |
| 最近记录: |