2009-02-10 9 views
16

I nie dostał moja głowa owinięta wiosny jeszcze, więc mnie poprawić, jeśli to pytanie nie ma sensu ...Jak zbierać właściwości wiosnę z wielu plików do użytku na jednym fasoli

mam WłaściwośćPlaceholderConfigurer

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

I mam wstrzykiwany fasolę, jak sądzę?

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

Co chcę to drugi zastępczy wskazując na różne właściwości pliku z nazwy użytkownika/hasła, tak, że mogę podzielić się właściwości w dwóch różnych plikach. Następnie informacje o połączeniu z bazą danych mogą być oddzielone od nazwy użytkownika/hasła db, a ja mogę uzyskać kontrolę nad jednym, a nie nad drugim.

Próbowałem po prostu skopiować obiekt rdbmPropertiesPlaceholder z innym identyfikatorem i plikiem i próbować uzyskać dostęp do właściwości, ale to nie działa.

Ten kod pochodzi z projektu portalu internetowego open uPortal.

+0

Zobacz także http://stackoverflow.com/questions/686635/is-it-possible-to-have-multiple-propertyplaceholderconfigurer-in-my-applicationc – Vadzim

Odpowiedz

28

Używając tej notacji pozwala określić wiele plików:

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

propertyplaceholderconfigurerer tylko łączy wszystkie te wyglądają jak jest tylko jeden, więc twoje definicje fasoli nie wiem, gdzie właściwości pochodzą.

+0

Ta składnia wydaje się być w porządku, ale nie wydaje się załadować mój drugi plik. Nie jestem do końca pewien, co się dzieje ... –

+0

Ok, więc myślę, że to wymyśliłem. To samo dzieje się w dwóch miejscach, ale wydaje się, że działa tylko w tym, na co nie patrzyłem. Dzięki, myślę, że to naprawiło! –

17

Można to zrobić za pomocą org.springframework.beans.factory.config.PropertyPlaceholderConfigurer. Można już użyć rozstawu nazw, aby można było odwoływać się do właściwości o tej samej nazwie z obu plików . bez ambiquity dla przykładu, można to zrobić:

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

w plikach kontekstowych, można odwołać się do właściwości ogólnych z $ {someproperty}, oraz zapoznać się RDBM właściwości z $ db {someproperty }.

To sprawi, że pliki kontekstowe będą bardziej przejrzyste i czystsze dla programisty.

+1

Czy to zadziała, gdy chcę uzyskać zawartość pliku '.properties', np.' @Value ("$ {content.of.properties.file}") '? –

Powiązane problemy