2009-02-10 8 views
16

Ich habe sammelt nicht mein Kopf um Frühling noch gewickelt bekommen, mich so korrigieren, wenn diese Frage ...Wie Federeigenschaften aus mehreren Dateien für die Verwendung auf einem einzigen Bohne

macht keinen Sinn habe ich eine PropertyPlaceholderConfigururer

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

Und ich habe eine Bohne injiziert, denke ich?

<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}" /> 
    ... 

Was ich will, ist ein zweiter Platzhalter auf eine andere Eigenschaften zeigen Datei mit dem Benutzernamen/Passwort, so dass ich die Eigenschaften in zwei verschiedene Dateien aufteilen kann. Dann können die Datenbankverbindungsinformationen von dem Datenbankbenutzernamen/-passwort getrennt sein, und ich kann die Kontrolle über die eine und nicht die andere beziehen.

Ich habe versucht, im Grunde die rdbmPropertiesPlaceholder mit einer anderen ID und Datei kopieren und versuchen, auf die Eigenschaften zuzugreifen, aber es funktioniert nicht.

Dieser Code stammt vom Open Source-Portalprojekt uPortal.

+0

Siehe auch http://stackoverflow.com/questions/686635/is-it-possible-to-have-multiple-propertyplaceholderconfigurer-in-my-applicationc – Vadzim

Antwort

28

dieser Notation können Sie mehrere Dateien angeben:

<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> 

Die propertyplaceholderconfigurerer nur alle diese verschmilzt aussehen es nur eine ist, so Bean Definitionen nicht wissen, wo die Objekte kommen.

+0

Diese Syntax scheint in Ordnung, aber es scheint nicht zu laden meine zweite Datei. Bin mir nicht wirklich sicher was los ist ... –

+0

Ok, also ich denke ich habe es herausgefunden. Das Gleiche wird an zwei Stellen getan, aber es scheint nur in der einen Wirkung zu haben, die ich nicht betrachtete. Danke, ich denke das hat es behoben! –

17

Die org.springframework.beans.factory.config.PropertyPlaceholderConfigurer kann dies tun (wie bereits beantwortet. Was Sie tun möchten, ist die Verwendung der Namen Abstand, so dass Sie auf die gleichnamigen Eigenschaften aus beiden Dateien beziehen können . ohne ambiquity Für Ihr Beispiel können Sie dies tun:

<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> 

In Ihrem Kontext-Dateien können Sie nun auf allgemeine Eigenschaften mit $ siehe {someproperty} und beziehen sich Eigenschaften mit $ db RDBM {someproperty }

Dies macht Ihre Context-Dateien für den Entwickler viel sauberer und übersichtlicher.

+1

Funktioniert das einmal, wenn ich den Inhalt der '.properties' Datei, dh' @Value ("$ {content.of.properties.file}"), bekommen will ''? –

Verwandte Themen