2009-02-10 16 views
16

non ho ottenuto la mia testa avvolta attorno Primavera ancora, quindi mi corregga se questa domanda non ha senso ...Come raccogliere le proprietà di primavera da più file per uso su un singolo chicco

Ho un PropertyPlaceholderConfigurer

<bean id="rdbmPropertiesPlacholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"> 
    <property name="location" value="classpath:/properties/rdbm.properties" /> 
</bean> 

E ho inoculato un fagiolo, immagino?

<bean id="PortalDb" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${hibernate.connection.driver_class}" /> 
    <property name="url" value="${hibernate.connection.url}" /> 
    <property name="username" value="${hibernate.connection.username}" /> 
    <property name="password" value="${hibernate.connection.password}" /> 
    ... 

Quello che voglio è una seconda segnaposto che punta a un diverso file di proprietà con il nome utente/password in modo che io possa dividere le proprietà in due file differenti. Quindi le informazioni sulla connessione al database possono essere separate dal nome utente/password db e posso controllare il controllo uno e non l'altro.

Ho provato praticamente a copiare rdbmPropertiesPlaceholder con un ID e un file diverso e tentando di accedere alle proprietà, ma non funziona.

Questo codice proviene dal progetto portale Web open source uPortal.

+0

Vedere anche http://stackoverflow.com/questions/686635/is-it-possibile-per-essere-multiple-propertyplaceholderconfigurer-in-my-applicationc – Vadzim

risposta

28

Utilizzando questa notazione consente di specificare più file:

<bean id="rdbmPropertiesPlacholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"> 
    <property name="locations"> 
     <list> 
      <value>classpath:/properties/rdbm.properties</value> 
      <value>classpath:/properties/passwords.properties</value> 
     </list> 
    </property> 
</bean> 

Il propertyplaceholderconfigurerer appena fonde tutti questi a guardare come se ci fosse una sola, in modo che le definizioni di fagioli non sanno dove le proprietà vengono.

+0

Questa sintassi sembra ok, ma non sembra caricare il mio secondo file. Non sono sicuro di cosa stia succedendo ... –

+0

Ok, quindi penso di averlo capito. La stessa cosa viene fatta in due punti, ma sembra solo avere un effetto in quello che non stavo guardando. Grazie, penso che sia stato risolto! –

17

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer può eseguire questa operazione (come già risposto. È possibile utilizzare la spaziatura del nome in modo da poter fare riferimento alle proprietà con lo stesso nome di entrambi i file . senza ambiquity per esempio, si può fare questo:

<bean id="generalPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:/properties/general.properties"/> 
</bean> 

<bean id="db.PropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:/properties/rdbm.properties" /> 
    <property name="placeholderPrefix" value="$db{" /> 
    <property name="placeholderSuffix" value="}" />  
</bean> 

nei file di contesto, ora si può fare riferimento a proprietà generali con $ {someproperty}, e si riferiscono RDBM proprietà con $ db {someproperty }.

Questo renderà i file di contesto molto più chiari e chiari allo sviluppatore.

+1

Funzionerà quando voglio ottenere il contenuto del file '.properties', ad es.' @Value ("$ {content.of.properties.file}") '? –