У меня есть 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;
}
}
Где TopicConfiguration
- это просто POJO с перечисленными 3 полями.
Когда я не пытаюсь изменить какой-либо объект свойства во время выполнения, это работает точно так, как я ожидаю, однако я могуне обновлять список свойств вообще.Когда я пытаюсь обновить существующий объект, я получаю 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
, если они хотят обновить эту конфигурацию.