我正在尝试获取带有{"host1": DatabaseConfigurationProperty("abcd", "mytable", "user")}
的地图,但是我下面的代码仅生成一个空的Map。
application.yml:
database:
host1:
hostname: abcd
name: mytable
username: user
数据库配置属性.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;
}
}
数据库配置.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;
}
}
主配置.java:
@Configuration
public class MainConfig {
@Autowired
private DatabaseConfigurationProperty databaseConfigurationProperty;
}
databaseConfigurationProperty.getDatabase(( 作为空 Map 返回。
有了@ConfigurationProperties("database")
,你告诉 spring 将 yaml 中属性database
下的值映射到类DatabaseConfigurationProperty
中的字段。
因此,DatabaseConfigurationProperty
期望在yaml中的数据库下有一个名为数据库的字段,例如
database:
database:
host1:
hostname: abcd
name: mytable
username: user
如果你有这种格式的 yaml,你的示例将正常工作。
您拥有的另一种选择是让 yaml 保持不变并更改
@ConfigurationProperties("database") to `@ConfigurationProperties`
然后,该类将期望顶级字段database
,该字段已存在于您的yaml中。
您还必须更正字段名称host
以在DatabaseConfiguration
中hostname
,或更改 yaml 属性以匹配名称。