Spring Config将String映射到对象

问题描述 投票:1回答:1

我正在尝试使用{"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返回。

java spring spring-config
1个回答
0
投票

使用@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属性以匹配名称。

© www.soinside.com 2019 - 2024. All rights reserved.