Jak skonfigurować fasolę wiosenną z właściwościami przechowywanymi w tabeli bazy danych


W moim projekcie chcielibyśmy udostępnić właściwości naszych komponentów bean zarządzanych przez Springa, co jest bardzo łatwe w przypadku standardowych plików Java .properties, jednak chcemy mieć możliwość odczytu tych właściwości z tabeli DB, która zachowuje się jak mapa ( klucz to nazwa właściwości, wartość to wartość przypisana do tej właściwości).
znalazłem

ten post
http://forum.springsource.org/ ... 15583
co sugeruje użycie

Konfiguracja Commons
http://commons.apache.org/configuration/
Ale nie wiem, czy jest lepszy sposób na zrobienie tego samego z Spring 3.x.
Jakieś wskazówki?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

użyłbym
FactoryBean
http://static.springsource.org ... ybean
typu
& < Properties & >
, z którym chciałbym zaimplementować
JdbcTemplate
http://static.springsource.org ... te... Następnie możesz użyć wygenerowanego obiektu
Properties
z mechanizmem
<context:property-placeholder>
http://static.springsource.org ... gurer
.

Przykładowy kod

:
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;
}
}


Konfiguracja 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"/>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Oprócz sugestii Seana możesz rozszerzyć
PropertyPlaceholderConfigurer
. Przyjrzyj się dwóm obecnym implementacjom,
PreferencesX
i
ServletContextX
, i wdróż własną, opartą na jdbc.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Istnieją sposoby programowego tworzenia „PropertyPlaceholderConfigurer”, patrz poniżej.
Napisz DAO, który odczytuje właściwości i utwórz PropertyPlaceholderConfigurer, jak pokazano poniżej.
XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));
PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
cfg.setProperties(yourProperties);
cfg.postProcessBeanFactory(factory);

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się