java - 如何使用存储在数据库表中的属性配置 Spring bean

标签 java database spring configuration properties

在我的项目中,我们希望将 Spring 托管 bean 的属性外部化,这对于标准 Java .properties 文件很容易做到,但是我们希望能够从行为类似的 DB 表中读取这些属性一个 Map(键是属性名称,值是分配给该属性的值)。

我找到了 this post建议使用 Commons Configuration但我不知道是否有更好的方法来使用 Spring 3.x。也许实现我自己的 PropertyResource 或其他东西。

有什么线索吗?

最佳答案

我会使用 FactoryBean 类型 <Properties>我将使用 JdbcTemplate 来实现.然后可以使用生成的 Properties 带有 <context:property-placeholder> 的对象机制。

示例代码:

public class JdbcPropertiesFactoryBean
    extends AbstractFactoryBean<Properties>{

    @Required
    public void setJdbcTemplate(final JdbcTemplate jdbcTemplate){
        this.jdbcTemplate = jdbcTemplate;
    }
    private JdbcTemplate jdbcTemplate;

    @Required
    public void setTableName(final String tableName){
        this.tableName = tableName;
    }
    private String tableName;

    @Required
    public void setKeyColumn(final String keyColumn){
        this.keyColumn = keyColumn;
    }
    private String keyColumn;

    @Required
    public void setValueColumn(final String valueColumn){
        this.valueColumn = valueColumn;
    }
    private String valueColumn;

    @Override
    public Class<?> getObjectType(){
        return Properties.class;
    }

    @Override
    protected Properties createInstance() throws Exception{
        final Properties props = new Properties();
        jdbcTemplate.query("Select " + keyColumn + ", " + valueColumn
            + " from " + tableName, new RowCallbackHandler(){

            @Override
            public void processRow(final ResultSet rs) throws SQLException{
                props.put(rs.getString(1), rs.getString(2));
            }

        });
        return props;
    }
}

XML 配置:

<bean id="props" class="foo.bar.JdbcPropertiesFactoryBean">
    <property name="jdbcTemplate">
        <bean class="org.springframework.jdbc.core.JdbcTemplate">
            <!-- reference to a defined data source -->
            <constructor-arg ref="dataSource" />
        </bean>
    </property>
    <property name="tableName" value="TBL_PROPERTIES" />
    <property name="keyColumn" value="COL_KEY" />
    <property name="valueColumn" value="COL_VAL" />
</bean>

<context:property-placeholder properties-ref="props" />

关于java - 如何使用存储在数据库表中的属性配置 Spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599252/

相关文章:

java - 在 Java 8 中递归展平嵌套映射的值

.net - 未生成 LINQ to SQL 关联

java - java中如何将爬取的数据存储到sql数据库中

java - 遍历 JSP 中的列表对象

java - Spring 安全登录404

java - 如何在 Java 中将 2D Array 更改为 ArrayList

java - kill -3 或 jstack : What is the difference?

java - 使用 JGit 的 PullCommand 进行身份验证

SQL Server 数据库更改工作流最佳实践

java - 最新的 hibernate (5) 是否适用于数组类型?