我有一个application.yml
包含以下内容的文件:
topics:
input:
- name: topic1
partitions: 3
replicas: 1
- name: topic2
partitions: 6
replicas: 2
我希望能够在运行时更新或添加新的主题对象。
我尝试了以下方法来更新现有对象:
java -jar app.jar --topics.input[0].name="topicX"
以及将另一个对象添加到列表中的以下内容:
java -jar app.jar --topics.input[2].name="topicX" --topics.input[2].partitions=6 --topics.input[2].replicas=2
我通过以下方式访问属性:
@Component
@ConfigurationProperties(prefix = "topics")
@Validated
public class TopicsConfiguration {
@NotEmpty
@NotNull
private List<TopicConfiguration> input = new ArrayList<>();
public List<TopicConfiguration> getInputTopics() {
return input;
}
public void setFacts(List<TopicConfiguration> input) {
this.input = input;
}
}
WhereTopicConfiguration
只是一个列出了 3 个字段的 POJO。
当我不尝试在运行时修改任何属性对象时,这完全符合我的预期,但是我根本无法更新属性列表。当我尝试更新现有对象时,我得到一个 NPE。当我尝试将新对象添加到列表中时,我得到:
Property: topics.input[2].name
Value: lmnop
Origin: "topics.input[2].name" from property source "commandLineArgs"
Reason: The elements [topics.input[2].name,topics.input[2].partitions,topics.input[2].replicas] were left unbound.
application.yml
我只想知道是否有任何方法可以在运行时更新或添加元素到列表中,这样我的项目的用户如果想要更新此配置就不必进行修改。