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