Spring-Kafka:如何从application.yml传递kafka主题

Spring-Kafka: How to pass the kafka topic from the application.yml

我在Spring Kafka 中有一个小项目 我希望我可以从 application.yml 传递我的 kafka 主题并避免硬编码问题。目前我的情况是:


public class KafkaConsumer {
    @Autowired
    private UserRepository userRepository;


    @KafkaListener(topics = "myTopic")
    public void listen(@Validate UserDto userDto) {

        User user= new User(userDto);
        userRepository.save(userDto.getAge(), user);
    }
}

此时我有静态 kafka 主题(是一个字符串)是否可以将它放在 application.yml 中并从那里读取?感谢大家的帮助

您可以在 application.yml 文件中使用以下条目

通常我们使用@Value 如下所示从properties/yaml 文件中为您Java class 中指定的键选择数据。

@Value("${kafka.topic.name}")
private String TOPIC_NAME;

由于这里的Kafka Listener需要常量,可以直接使用如下

public class KafkaConsumer {

@Autowired
private UserRepository userRepository;


@KafkaListener(topics = "${kafka.topic.name}")
public void listen(@Validate UserDto userDto) {

    User user= new User(userDto);
    userRepository.save(userDto.getAge(), user);
}

}

您可以 post 您的主题 application.yml :

kafka:
  template:
    default-topic: "MyTopic"

在你的 KafkaListerner 中:

@KafkaListener(topics = "#{'${spring.kafka.template.default-topic}'}")

所以你应该解决“属性值”不能取动态值的问题

这对我有用。