2014-10-15 12 views
9

E 'possibile caricare proprietà da DB con Custom Spring PropertyPlaceholderConfigurer? ed è anche possibile che l'origine dati fornita a PropertyPlaceholderConfigurer personalizzato usi un file di proprietà specifico in classpath?Spring PropertyPlaceholderConfigurer carica dal DB

Non riesco a trovare la risposta soddisfatta dai seguenti collegamenti?

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

Questo non è l'approccio che si vuole prendere ... Supponendo che si sta utilizzando 3.x primavera o poi crea una PropertySource che è guidato da un database e lo registra con la classe 'Environment'. Supponendo che tu stia usando 'PropertySourcesPlaceholderConfigurer' che funziona come un incantesimo. –

risposta

11

Primavera Contesto 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; 
    } 


} 

Un ringraziamento speciale allo scrittore delle pagine seguenti.

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

Problemi correlati