我正在尝试使用{"host1": DatabaseConfigurationProperty("abcd", "mytable", "user")}
获取地图,但是下面的代码只会生成一个空的地图。
application.yml:
database:
host1:
hostname: abcd
name: mytable
username: user
DatabaseConfigurationProperty.java:
@Configuration
@ConfigurationProperties("database")
@EnableConfigurationProperties
@Component
public class DatabaseConfigurationProperty {
Map<String, DatabaseConfiguration> database = new HashMap<>();
public Map<String, DatabaseConfiguration> getDatabase() {
return database;
}
public void setDatabase(Map<String, DatabaseConfiguration> database) {
this.database = database;
}
}
DatabaseConfiguration.java:
public class DatabaseConfiguration {
String host;
String name;
String username;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
MainConfig.java:
@Configuration
public class MainConfig {
@Autowired
private DatabaseConfigurationProperty databaseConfigurationProperty;
}
databaseConfigurationProperty.getDatabase()作为一个空的Map返回。
答案 0 :(得分:0)
使用@ConfigurationProperties("database")
,您要告诉spring将yaml中属性database
下的值映射到类DatabaseConfigurationProperty
中的字段。
因此DatabaseConfigurationProperty
期望yaml中的database下的一个名为database的字段
database:
database:
host1:
hostname: abcd
name: mytable
username: user
如果您使用这种格式的Yaml,则您的示例可以正常工作。
您还有一个选择是让Yaml保持不变并更改
@ConfigurationProperties("database") to `@ConfigurationProperties`
然后,课程将在您的Yaml中出现顶级字段database
。
您还必须将host
中的字段名称hostname
改成DatabaseConfiguration
或更改yaml属性以匹配名称。