web-dev-qa-db-ja.com

JavaプロパティファイルをロードするようにSpringBeanコンテナをどのように構成しますか?

JavaプロパティファイルをロードするようにSpringBeanコンテナ(またはアプリケーションコンテキスト)をどのように構成しますか?

JavaWorld 記事 プロパティをスマートにロードする 次のいずれかを使用してクラスパスからプロパティファイルをロードする方法について説明します。標準のJavaライブラリの次のリソース処理メソッド:

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

Spring Beanコンテナを使用して同じことをどのように行うことができますか?

10
Derek Mahar

Spring Frameworkリファレンスドキュメント(2.5.x) は、プロパティファイルをBeanコンテナにロードする方法の2つの例を示しています。1つはバージョン2.5のリリース前で、もう1つは<util:properties/>関数を使用したより簡潔な方法です。バージョン2.5で導入:

バージョン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>

バージョン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"/>

<util:properties/>を使用するには、SpringXML構成ファイルの先頭にあるプリアンブルでutil名前空間とスキーマの場所を宣言する必要があることに注意してください。

<?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>
16
Derek Mahar

beans.xmlファイルには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>

そして、beans.xmlの他の場所でプロパティ自体を参照できます。

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

これに関する記事については、チェックアウトしてください http://almaer.com/blog/spring-propertyplaceholderconfigurer-a-Nice-clean-way-to-share

7
Edward Dale

たとえば、 PropertiesFactoryBean を介して。 PropertyPlaceholderConfigurer を使用して、プロパティを介してコンテキスト内のBeanを構成します。

PropertyPlaceholderConfigurerの例は他の回答にあります。これがPropertiesFactoryBeanの例です:

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

PropertyPlaceholderConfigurerと呼ばれるものがあります。これを使用して、次のようにプロパティファイルから値をBeanに挿入できます。

<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>
2
Nathan Hughes

オブジェクトをJava.util.Propertiesのインスタンスとして参照する場合は、次のようにする必要があります。

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

これにより、Spring Bean propertiesJava.util.Propertiesのインスタンスとして参照できます。 locationに値を追加することで、複数のプロパティファイルをマージすることもできます。 Springが場所として受け入れる値のタイプについては、 リソース文字列 の説明を参照してください。 SpringXMLで${}スタイルの置換を使用したい場合は、その方法を説明する他の多くの回答があることがわかります。

1
laz

私たちはこれを使用します:

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

これにより、そこで定義されたプロパティを構成ファイルの参照として使用できます。

詳細については、以下を参照してください。

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

1
Peter Tillemans