2010-06-04 4 views
9

Jak skonfigurować kontener składnika Spring bean (lub kontekst aplikacji), aby załadować plik właściwości Java?Jak skonfigurować kontener składnika Spring bean w celu załadowania pliku właściwości Java?

JavaWorld artykuł Smartly Load Your Properties wyjaśnia, w jaki sposób załadować pliki własności ze ścieżki klasy przy użyciu jednej z następujących metod przetwarzania zasobów w bibliotece standardowej Java:

ClassLoader.getResourceAsStream ("some/pkg/resource.properties"); 
Class.getResourceAsStream ("/some/pkg/resource.properties"); 
ResourceBundle.getBundle ("some.pkg.resource"); 

Jak można zrobić to samo przy użyciu kontenera Wiosna Bean?

Odpowiedz

15

Spring Framework Reference Documentation (2.5.x) podaje dwa przykłady, jak załadować plik własności do pojemnika fasoli, jeden przed wydaniem wersji 2.5 i bardziej zwięzły sposób, korzystając z funkcji <util:properties/>, który został wprowadzony w wersji 2.5:

Przed wersją 2.5:

<!-- creates a java.util.Properties instance with values loaded from the supplied location --> 
<bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="location" value="classpath:com/foo/jdbc-production.properties"/> 
</bean> 

Po wersji 2.5:

<!-- creates a java.util.Properties instance with values loaded from the supplied location --> 
<util:properties id="jdbcConfiguration" location="classpath:com/foo/jdbc-production.properties"/> 

pamiętać, że w celu korzystania <util:properties/>, trzeba zadeklarować lokalizację util przestrzeni nazw i schematu w preambule na początku pliku konfiguracyjnym XML Wiosny:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"> 

<!-- <bean/> definitions here --> 

</beans> 
+1

Patrząc na schemat i dokumentację w dodatku A, najwyraźniej tak nie jest. – laz

7

Plik beans.xml powinien mieć PropertyPlaceholderConfigurer:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:some/pkg/resource.properties</value> 
     </list> 
    </property> 
    <!-- Default values for backwards compatibility --> 
    <property name="properties"> 
     <props> 
      <prop key="name">value</prop> 
     </props> 
    </property> 
</bean> 

a następnie można odwołać właściwości jako taki w innym miejscu beans.xml:

<bean class="${blah}"> 
    .... 
<bean> 

do artykułu na ten temat, sprawdź http://almaer.com/blog/spring-propertyplaceholderconfigurer-a-nice-clean-way-to-share

+0

w przeciwieństwie do metod, do których odnoszę się moje pytanie, funkcja '', a klasa 'PropertiesFactoryBean' The' PropertyPlaceholderConfigurer' podejście nie powoduje, że właściwości są widoczne poza kontekstem. –

1

Używamy tego:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
    <property name="locations"> 
     <value>classpath:test.properties</value> 
    </property> 
</bean> 

który umożliwia właściwości zdefiniowane tam być wykorzystane jako punkt odniesienia w plikach konfiguracyjnych

uzyskać więcej informacji zobacz:

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

+0

W przeciwieństwie do metod, do których odwołuję się w moim pytaniu, funkcja '' i klasa 'PropertiesFactoryBean', podejście' PropertyPlaceholderConfigurer' nie powoduje, że właściwości są widoczne poza kontekstem. –

2

Jest to coś nazywa się PropertyPlaceholderConfigurer, można go używać do wstrzyknij fasolę wartościami z pliku właściwości, na przykład:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <value>classpath:com/foo/jdbc.properties</value> 
    </property> 
</bean> 

<bean id="dataSource" destroy-method="close" 
     class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 
+0

W przeciwieństwie do metod, do których odwołuję się w moim pytaniu, funkcja '' i klasa 'PropertiesFactoryBean', podejście' PropertyPlaceholderConfigurer' nie powoduje, że właściwości są widoczne poza kontekstem. –

5

Dla przykład przez PropertiesFactoryBean. Użyj PropertyPlaceholderConfigurer do skonfigurowania fasoli w kontekście za pośrednictwem właściwości.

W innych odpowiedziach znajdziesz przykłady PropertyPlaceholderConfigurer. Oto PropertiesFactoryBean przykład:

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="location" value=classpath:config/applicationConfig.properties"/> 
</bean> 
+0

Twoja odpowiedź była jedyną, która wymieniła zarówno 'PropertiesFactoryBean' oraz' PropertyPlaceholderConfigurer'. Czy chciałbyś rozszerzyć różnice między tymi dwoma klasami? –

+5

Jeśli chcesz wstawić instancję właściwości jako komponent bean, użyj właściwości PropertiesFactoryBean. Użyj PropertyPlaceholderConfigurer, jeśli chcesz parametryzować inne komponenty bean na podstawie wartości pliku właściwości. Wierzę, że ProperiesFactoryBean jest tym, czego potrzebujesz tutaj. –

+0

jest to subtelne, ale bardzo ważne rozróżnienie. –

1

Jeśli chcesz odwołać się do obiektu jako przykład java.util.Properties, należy wykonać następujące czynności:

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="ignoreResourceNotFound"><value>true</value></property> 
    <property name="locations"> 
     <list> 
      <value>classpath:property-file.properties</value> 
     </list> 
    </property> 
</bean> 

Pozwala to na odniesienie wiosną fasoli properties jako wystąpienie java.util.Properties. Możesz nawet połączyć wiele plików właściwości, dodając więcej wartości do location. Zobacz ten opis resource strings, aby uzyskać informacje o typach wartości, które Spring zaakceptuje dla lokalizacji. Jeśli chcesz używać podstawień stylów ${} w Spring XML, możesz zobaczyć, że istnieje wiele innych odpowiedzi opisujących, jak to zrobić.

+0

To rozwiązanie jest bliższe metodom, do których odwołuję się w moim pytaniu i zachowuje się podobnie do funkcji ''. –

Powiązane problemy