2010-06-04 3 views
9

Wie konfigurieren Sie einen Spring-Bean-Container (oder Anwendungskontext) zum Laden einer Java-Eigenschaftendatei? Mithilfe der folgenden Ressourcenverarbeitungsmethoden in der Standard-Java-BibliothekWie konfigurieren Sie einen Spring-Bean-Container zum Laden einer Java-Eigenschaftendatei?

JavaWorld Artikel Smartly Load Your Properties erklärt, wie Eigenschaftsdateien aus dem Classpath laden:

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

Wie können Sie tun, um einen Frühlings-Bohnenbehälter des gleich Verwendung?

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

Und dann können Sie die Eigenschaften als solche an anderer Stelle im beans.xml Referenz:

Antwort

15

Die Spring Framework Reference Documentation (2.5.x) gibt zwei Beispiele dafür, wie eine Eigenschaft Datei in einen Bohnenbehälter zu laden, eine vor der Veröffentlichung von Version 2.5 und eine prägnanten Art und Weise mit der <util:properties/>-Funktion, die in Version 2.5 eingeführt wurde:

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

Nach Version 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"/> 

Beachten Sie, dass <util:properties/>, um zu verwenden, können Sie die util Namespace und Schemaposition in der Präambel erklären muss an der Spitze Ihrer Spring-XML-Konfigurationsdatei:

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

Mit Blick auf das Schema und die Dokumentation in Anhang A, scheint es nicht. – laz

7

Ihre beans.xml Datei eine PropertyPlaceholderConfigurer haben sollte

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

Für einen Artikel über diese Besuche http://almaer.com/blog/spring-propertyplaceholderconfigurer-a-nice-clean-way-to-share

+0

im Gegensatz zu den Methoden, auf die ich verweise auf meine Frage, Funktion '' und 'Klasse PropertiesFactoryBean', die' PropertyPlaceholderConfigurer' Ansatz macht die Eigenschaften nicht außerhalb des Kontexts sichtbar. –

1

Wir verwenden dies:

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

die dort als Referenzen in den Konfigurationsdateien verwendet werden definiert die Eigenschaften ermöglicht

Für weitere Informationen siehe:

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

+0

Im Gegensatz zu den Methoden, auf die ich in meiner Frage, der Funktion '', und der Klasse 'PropertiesFactoryBean' verweise, macht die' PropertyPlaceholderConfigurer'-Methode die Eigenschaften nicht außerhalb des Kontextes sichtbar. –

2

Es dieses Ding ist ein PropertyPlaceholderConfigurer genannt, können Sie es verwenden können, injizieren Sie Ihre Beans mit Werten aus einer Eigenschaftendatei, wie folgt:

<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

Im Gegensatz zu den Methoden, auf die ich in meiner Frage, der Funktion '', und der Klasse 'PropertiesFactoryBean' verweise, macht die' PropertyPlaceholderConfigurer'-Methode die Eigenschaften nicht außerhalb des Kontextes sichtbar. –

5

Für Beispiel über die PropertiesFactoryBean. Verwenden Sie die PropertyPlaceholderConfigurer, um Beans im Kontext über Eigenschaften zu konfigurieren.

Beispiele für PropertyPlaceholderConfigurer finden Sie in den anderen Antworten. Hier ist ein PropertiesFactoryBean Beispiel:

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

Ihre Antwort war die einzige, die sowohl 'PropertiesFactoryBean' als auch' PropertyPlaceholderConfigurer' erwähnt. Würden Sie gerne die Unterschiede zwischen diesen beiden Klassen erweitern? –

+5

Wenn Sie eine Properties-Instanz als Bean injizieren möchten, verwenden Sie PropertiesFactoryBean. Verwenden Sie PropertyPlaceholderConfigurer, wenn Sie andere Beans basierend auf Werten einer Eigenschaftendatei parametrisieren möchten. Ich glaube, dass ProperiesFactoryBean ist, was Sie hier brauchen. –

+0

Dies ist eine subtile, aber sehr wichtige Unterscheidung. –

1

Wenn Sie das Objekt als Instanz von java.util.Properties verweisen möchten, sollten Sie Folgendes tun:

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

Diese Sie die Spring-Bean properties als verweisen erlaubt Instanz von java.util.Properties. Sie können sogar mehrere Eigenschaftendateien zusammenführen, indem Sie location weitere Werte hinzufügen. In dieser Beschreibung von resource strings finden Sie Informationen darüber, welche Arten von Werten Spring für den Standort akzeptiert. Wenn Sie im Spring XML-Format ${} verwenden möchten, können Sie sehen, dass es eine Reihe anderer Antworten gibt, in denen beschrieben wird, wie dies zu tun ist.

+0

Diese Lösung ist näher an den Methoden, auf die ich in meiner Frage referenziere und verhält sich ähnlich wie die Funktion ''. –