@ConfigurationProperties не использует PropertySourcesPlaceholderConfigurer - PullRequest
1 голос
/ 25 марта 2019

PropertySourcesPlaceholderConfigurer работает для моих @Value с, но не используется для следующей объявленной конфигурации источника данных

@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

Я настроил PropertySourcesPlaceholderConfigurer для декодирования паролей в файле конфигурации, но функция декодирования для этого не активированаточное место, пока оно работает в других местах.Не могли бы вы посоветовать, пожалуйста?

1 Ответ

1 голос
/ 25 марта 2019

По умолчанию Spring будет использовать простой / неупакованный ConfigurationPropertySource вместо более сложного PropertySourcesPlaceholderConfigurer, который содержит несколько PropertySource с.

Пример можно найти внутри DataSourceBuilder самого

private void bind(DataSource result) {
    ConfigurationPropertySource source = new MapConfigurationPropertySource(this.properties);
    ConfigurationPropertyNameAliases aliases = new ConfigurationPropertyNameAliases();
    aliases.addAliases("url", "jdbc-url");
    aliases.addAliases("username", "user");
    Binder binder = new Binder(source.withAliases(aliases));
    binder.bind(ConfigurationPropertyName.EMPTY, Bindable.ofInstance(result));
}

Для этого фрагмента обычно this.properties заполняется с использованием DataSourceProperties Bean , который является @ConfigurationProperties аннотированным классом

@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {

Дело в том, @ConfigurationProperties сопоставление 1: 1 с файлом свойств, оно очень самоуверенное.
@Value другой зверь.


В этом ответе я отвечал на полностью кастомную реализацию.
Вы можете найти это ценным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...