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]中的一些示例一样。我只是不确定语法可能是什么,因为我看到的唯一方法是使用多个注释来构造像[Reading a map from yaml in Java getting null]这样的POJO,它在@KafkaListener
注释上下文中不起作用
注意:主题需要命名,因为它们是在不同的上下文中单独提取的。
编辑:拼写
答案 0 :(得分:1)
如果不提取@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名称看起来很尴尬,但我们可以用人工豆来克服它:
@Autowired
private KafkaAppProperties properties;
@Bean
public Map<String, String> kafkaTopic() {
return this.properties.getTopics();
}
...
@KafkaListener(topics = "#{@kafkaTopic.values()}")
public void handle(Object record) {
...
}