spring kafka:如何从application.yml传递kafka主题

w8biq8rn  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(406)

我在SpringKafka有一个小项目,我希望我能通过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中并从那里读取吗?谢谢大家的帮助

6ioyuze2

6ioyuze21#

您可以在application.yml中发布您的主题:

kafka:
  template:
    default-topic: "MyTopic"

在你的Kafka里:

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

所以应该解决“属性值”不能取动态值的问题
这对我有用。

gzszwxb4

gzszwxb42#

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

通常我们使用@value as below从properties/yaml文件中为java类中的指定键选取数据,如下所示。

@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);
}

}

相关问题