字符串到对象的弹簧配置映射



我正在尝试获取带有{"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以在DatabaseConfigurationhostname,或更改 yaml 属性以匹配名称。

相关内容

  • 没有找到相关文章

最新更新