gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:50:57 24 4
gpt4 key购买 nike

在我的项目中,我们希望将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com