2014-10-15 9 views
9

Ist es möglich, Eigenschaften von DB mit Custom Spring PropertyPlaceholderConfigurer zu laden? und ist es auch möglich, dass die Datenquelle für benutzerdefinierte PropertyPlaceholderConfigurer bestimmte Eigenschaftendatei in Classpath verwendet?Spring PropertyPlaceholderConfigurator laden von DB

Ich konnte keine zufriedene Antwort von folgenden Links finden?

http://www.mkyong.com/spring/spring-propertyplaceholderconfigurer-example/ http://www.codeproject.com/Articles/28893/Loading-Application-Properties-from-a-Database PropertyPlaceholderConfigurer to look for DB values and use properties file as fallback

+0

Das ist nicht der Ansatz, den Sie ... Unter der Annahme nehmen wollen, ist, dass Sie Frühlings-3.x verwenden oder später eine PropertySource erstellen, die ist datenbankgesteuert und registriert dies mit der Klasse 'Environment'. Angenommen, Sie verwenden den 'PropertySourcesPlaceholderConfigurer', der wie ein Zauber wirkt. –

Antwort

11

Frühling Kontext XML

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <bean 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="ignoreUnresolvablePlaceholders" value="true"/> 
     <property name="ignoreResourceNotFound" value="false"/> 
     <property name="order" value="1" /> 
     <property name="locations"> 
      <list> 
       <value>classpath:db.properties</value> 
      </list> 
     </property> 
    </bean> 

<bean id="dataSourceimos" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
     <property name="driverClass"><value>${imosdb.driver}</value></property> 
     <property name="jdbcUrl"><value>${imosdb.url}</value></property> 
     <property name="user"><value>${imosdb.username}</value></property> 
     <property name="password"><value>${imosdb.password}</value></property> 
     <property name="initialPoolSize"><value>${imosdb.initial_pool_size}</value></property> 
     <property name="maxPoolSize"><value>${imosdb.max_pool_size}</value></property> 
     <property name="minPoolSize"><value>${imosdb.min_pool_size}</value></property> 
     <property name="acquireIncrement" value="1"/> 
     <property name="acquireRetryAttempts" value="1"/> 
     <property name="idleConnectionTestPeriod" value="30"/> 
     <property name="preferredTestQuery" value="select 1 from dual"/> 
     <property name="checkoutTimeout" value="5000"/> 
     <property name="maxAdministrativeTaskTime" value="120"/> 
     <property name="numHelperThreads" value="10"/> 
    </bean> 

    <bean 
     class="com.ahmetk.property.DbPropertySourcesPlaceholderConfigurer"> 
     <property name="ignoreUnresolvablePlaceholders" value="true"/> 
     <property name="ignoreResourceNotFound" value="true"/> 
     <property name="order" value="2" /> 
     <property name="placeholderPrefix" value="${" /> 
     <property name="placeholderSuffix" value="}" /> 
     <property name="dataSourceName" value="dataSourceimos" /> 

     <property name="locations"> 
      <list> 
       <value>classpath:static.properties</value> 
       <value>file:static.properties</value> 
      </list> 
     </property> 

    </bean> 

    <context:component-scan base-package="com.mkyong.rest" /> 

    <bean id="transactionBo" class="com.mkyong.transaction.impl.TransactionBoImpl" /> 
    <bean id="cacheServiceInterface" class="com.ttech.tims.imos.data.cache.CacheServiceImpl" /> 
    <bean id="iCacheService" class="com.ttech.tims.imos.data.cache.impl.CacheService" /> 

</beans> 

Java PlaceholderClass

import java.util.Properties; 

import javax.sql.DataSource; 

import org.springframework.beans.BeansException; 
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; 
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; 


public class DbPropertySourcesPlaceholderConfigurer extends PropertyPlaceholderConfigurer 
{ 
    private static final String DEFAULT_DATASOURCENAME = "dataSource"; 
    private static final String DEFAULT_DBTABLENAME = "property"; 
    private static final String DEFAULT_DBKEYCOLUMNNAME = "key"; 
    private static final String DEFAULT_DBVALUECOLUMNNAME = "value"; 
    String dataSourceName; 
    String dbTableName; 
    String dbKeyColumnName; 
    String dbValueColumnName; 
    @Override 
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException 
    { 

     DataSource dataSource = (DataSource) beanFactory.getBean(getDataSourceName()); 
    // DbProperties dbProps = new DbProperties(dataSource); 
     final Properties dbProps = new Properties(); 
     dbProps.put("app.version", "v3"); 
     setProperties(dbProps); 
     super.postProcessBeanFactory(beanFactory); 
    } 

    public String getDataSourceName() { 
     return dataSourceName==null?DEFAULT_DATASOURCENAME:dataSourceName; 
    } 

    public void setDataSourceName(String dataSourceName) { 
     this.dataSourceName = dataSourceName; 
    } 


} 

Besonderer Dank geht an den Verfasser der folgenden Seiten.

http://springtips.blogspot.com.tr/

http://ykchee.blogspot.com.tr/2012/09/spring-31-loading-properties-for-xml.html

http://blog.javaforge.net/post/31720600427/configuring-spring-based-web-application-from-database

http://www.javacodegeeks.com/2012/11/spring-3-1-loading-properties-for-xml-configuration-from-database.html

Verwandte Themen