В моем весеннем приложении я хотел бы загрузить почти всю конфигурацию из базы данных. Это достигается с помощью PropertyPlaceholderConfigurer, который использует DatabaseConfiguration в качестве свойств. Это работает правильно.
Но если я хочу загрузить свои свойства из базы данных, я должен сначала настроить соединение с базой данных, которое будет загружено из файла свойств. Я думаю, что решением было бы настроить 2nd PropertyPlaceholderConfigurer для локальных файлов конфигурации (из документации кажется, что это должно быть возможно). Во время инициализации источника данных свойства с аннотацией @Value по-прежнему равны нулю, они заполняются позже. Поэтому мой вопрос заключается в том, что я должен сделать, чтобы быть уверенным, что при инициализации моего компонента источника данных все значения уже загружены из файла конфигурации?
Я пытался использовать аннотацию @DependsOn ("2n2 PropertyPlaceholderConfigurer") длякомпонент источника данных, но он не работал должным образом (вероятно, потому что это только конфигурация?)
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
@DependsOn("configDataSource")
public PropertyPlaceholderConfigurer propertyPlaceholderConfigurer2() {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setSystemPropertiesModeName("SYSTEM_PROPERTIES_MODE_OVERRIDE");
ppc.setPlaceholderPrefix("$db-property");
DatabaseConfiguration databaseConfiguration = new DatabaseConfiguration(dataSource, "DOMAIN_CONFIG",
"CONFIG_NAME",
"CONFIG_VALUE");
ppc.setProperties(ConfigurationConverter.getProperties(databaseConfiguration));
return ppc;
}
@Bean("configDataSource")
@DependsOn("filePropertyPlaceholder")
public DataSource configDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean("filePropertyPlaceholder")
public PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setLocations(DEFAULT_CONFIG_FILES);
return configurer;
}