gpt4 book ai didi

java - 从命名的 yaml 属性列表中读取字符串数组作为常量?

转载 作者:行者123 更新时间:2023-11-30 06:33:19 24 4
gpt4 key购买 nike

Spring Java 是否可以从 YAML 文件中的命名值映射中读取字符串数组作为常量(特别是与 Spring-Kafka 中的 @KafkaListener 注释一起使用)?

   a:
b:
topics:
foo: FooTopic
bar: BarTopic

会产生一个常量 = ['FooTopic','BarTopic']。

我假设它类似于计算结果为列表的表达式,就像 [ Reading a List from properties file and load with spring annotation @Value 中的一些示例一样。 ]。我只是不确定语法可能是什么,因为我见过的唯一方法是使用多个注释来构造 POJO,如 [ Reading a map from yaml in Java getting null ] 这在 @KafkaListener 注释上下文中不起作用。

注意:主题需要命名,因为它们是在不同的上下文中单独提取的。

编辑:拼写

最佳答案

如果不提取@ConfigurationProperties,它就不会以这种方式工作。

这是我额头上的东西:

@KafkaListener(topics = {"${kafka.topics.foo}", "${kafka.topics.bar}"})

但同时有这个:

@ConfigurationProperties("kafka")
public class KafkaAppProperties {

private Map<String, String> topics = new HashMap<>();

public Map<String, String> getTopics() {
return this.topics;
}

}

我能做到:

 @KafkaListener(topics = "#{@'kafka-org.springframework.integration.samples.kafka.KafkaAppProperties'.topics.values()}")

对,KafkaAppProperties 的 bean 名称看起来很尴尬,但我们可以使用人造 bean 来克服它:

@Autowired
private KafkaAppProperties properties;

@Bean
public Map<String, String> kafkaTopic() {
return this.properties.getTopics();
}

...

@KafkaListener(topics = "#{@kafkaTopic.values()}")
public void handle(Object record) {
...
}

关于java - 从命名的 yaml 属性列表中读取字符串数组作为常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com