首页 文章

使用带有Spring Boot的Java Config从数据库加载属性

提问于
浏览
1

我创建了一个 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;
    }
}

这个类使用Spring和XML配置工作正常,我使用JNDI名称获取DataSource,然后创建适当的属性,然后通过XML标记使用propertiesPlaceHoldeConfigurer .

现在我想在Spring Boot和Java Config中使用相同的东西 .

当我将ProprtySourcesPlaceHolderConfigurer定义为bean(在 @Configuration 类中的静态方法中)时,Spring会尝试在数据源之前创建此bean .

有没有办法在PRopertySourcesPlaceHolderConfigurer之前创建数据源?

1 回答

  • 0

    基本上你需要以这种方式将依赖关系作为 @Bean 方法参数:

    @Configuration
    public static class AppConfig {
        @Bean
        public SystemPropertiesFactoryBean systemProperties(DataSource dataSource) {
          return new SystemPropertiesFactoryBean(dataSource);
        }
    
        @Bean
        public DataSource dataSource() {
          //  return new data source
        }
    }
    

相关问题