我创建了一个FactoryBean<Properties>
作为
public final class SystemProperteisFactoryBean implements FactoryBean<Properties> {
private static final String QUERY = "select * from tb_system_properties";
private final NamedParameterJdbcTemplate jdbcTemplate;
public SystemProperteisFactoryBean (DataSource datasource) {
this.jdbcTemplate = new NamedParameterJdbcTemplate (datasource);
}
@Override
public Properties getObject() {
Properties result = new Properties();
jdbcTemplate.query(QUERY,
(ResultSet rs) -> result.setProperty(rs.getString(1), rs.getString(2));
return result;
}
@Override
public Class<?> getObjectType() {
return Properties.class;
}
@Override
public boolean isSingletone() {
return true;
}
}
这个类使用带有 XML 配置的 Spring 工作得很好,我使用 JNDI 名称获取 DataSource,然后创建适当的属性,然后通过 XML 标记使用propertiesPlaceHoldeConfigurer。
现在我想在 Spring Boot 和 Java Config 中使用相同的东西。
当我将 ProprtySourcesPlaceHolderConfigurer 定义为 bean(在 @Configuration
类中的静态方法中)时,Spring 尝试在数据源之前创建此 bean。
有没有办法在 PROpertySourcesPlaceHolderConfigurer 之前创建数据源?
最佳答案
基本上,您需要以这种方式将依赖项作为 @Bean
方法参数:
@Configuration
public static class AppConfig {
@Bean
public SystemPropertiesFactoryBean systemProperties(DataSource dataSource) {
return new SystemPropertiesFactoryBean(dataSource);
}
@Bean
public DataSource dataSource() {
// return new data source
}
}
关于java - 使用 Java Config 和 Spring Boot 从数据库加载属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48763915/