Я хочу загрузить свойства сервера из application.yml в класс конфигурации. Я видел, что многие уже задавали тот же вопрос, но мне никто не помог :( Пожалуйста, помогите мне понять, что мне не хватает
@Configuration
@ConfigurationProperties("demo")
public class Democonfig {
private List<Archive> archive = new ArrayList<>();
public Democonfig(List<Archive> archive) {
this.archive = archive;
}
// Getter and setter
public static class Archive {
private String host;
private String database;
private String port;
public Archive(String host, String database, String port) {
this.host = host;
this.database = database;
this.port = port;
}
// Getters and setters
}
}
application.yml
demo:
archive:
-
host: "localhost"
database: "archive1"
port: "27017"
-
host: "localhost"
database: "archive2"
port: "27017"
показывает исключение
Binding to target [Bindable@129425f type = java.util.List<com.example.demo.config.Democonfig$Archive>, value = 'provided', annotations = array<Annotation>[[empty]]] failed:
Property: demo.archive[0].database
Value: archive1
Origin: class path resource [application.yml]:5:15
Reason: The elements [demo.archive[0].database,demo.archive[0].host,demo.archive[0].port,demo.archive[1].database,demo.archive[1].host,demo.archive[1].port] were left unbound.
Property: demo.archive[0].host
Value: localhost
Origin: class path resource [application.yml]:4:11
Reason: The elements [demo.archive[0].database,demo.archive[0].host,demo.archive[0].port,demo.archive[1].database,demo.archive[1].host,demo.archive[1].port] were left unbound.
Property: demo.archive[0].port
Value: 27017
Нажмите здесь! для полного исходного кода и проекта, загруженного в git




Вам не хватает конструктора No arg во вложенном статическом классе, и на самом деле нет необходимости предоставлять конструктору аргумент. Только сеттеры и геттеры в порядкеI также побудит вас проверить и использовать ломбок, это сделает ваш код кратким
public static class Archive {
private String host;
private String database;
private String port;
public Archive() {
// TODO Auto-generated constructor stub
}
public Archive(String host, String database, String port) {
System.out.println("constri=uu Archive");
this.host = host;
this.database = database;
this.port = port;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
@Override
public String toString() {
return "Archive [host = " + host + ", database = " + database + ", port = " + port + "]";
}
}
Оо, Мужик! Вы сэкономили мое время для очередной продуктивной работы! Спасибо!