Spring Config карта String для объекта - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь получить карту с {"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 () возвращается в виде пустой карты.

1 Ответ

0 голосов
/ 19 октября 2018

С помощью @ConfigurationProperties("database") вы указываете spring сопоставить значения в свойстве database в yaml с полями вашего класса DatabaseConfigurationProperty.

Следовательно, DatabaseConfigurationProperty ожидает поле с именем database в базе данных вyaml like

database: database: host1: hostname: abcd name: mytable username: user

Если у вас есть yaml в этом формате, ваш пример будет работать нормально.

Еще один вариант, который у вас есть, - оставить yaml таким же.и измените

@ConfigurationProperties("database") to `@ConfigurationProperties`

Тогда класс будет ожидать поле database на верхнем уровне, которое уже присутствует в вашем yaml.

Вы также должны исправить имя поля host на hostname в DatabaseConfiguration или измените свойство yaml в соответствии с именами.

...