4

PropertyPlaceholderConfigurerを現在の構成で機能させるのに問題があります。私のapplicationContext.xmlに次のコードブロックがあるとします。

<bean id="myProperties" 
    class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <!-- Order matters, last one to create a property wins! -->
            <value>classpath:default.properties</value>
            <value>file:${MYAPP_PROPERTIES_LOCATION:badurl}/application.properties</value>
            <value>file:${user.home}/developer.properties</value>
        </list>
    </property>
    <property name="ignoreResourceNotFound" value="true"/>

<bean id="propertyConfigurer" 
    class="org.springframework.beans.factory.config.PropertiesPlaceholderConfigurer">
    <property name="properties" ref="myProperties"/>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="searchSystemEnvironment" value="true"/>
</bean>

次に、default.propertiesファイルに次のものがあります(これらはテストプロパティです)。

property1=prop1val
property2=${property1}

機能:propertyConfigurerは、環境変数MYAPP_PROPERTIES_LOCATIONとシステム変数user.homeの両方を正しく解決します。ただし、最終的なプロパティオブジェクトはファクトリBeanによって作成され、結果のプロパティは [property1 = prop1val、property2 =${property1}]になります。

この構成では、myProperties Bean内のプロパティを取得して、プレースホルダーを解決するにはどうすればよいですか? 私はSpringコードのトレースを含めるために多くの調査を行いましたが、これが行われていない方法と理由を確認できます。足りない設定があるといいのですが!これは私の最初の投稿なので、気楽にやってください:)

4

2 に答える 2

1

春とプロパティファイルの適切な構成があります。そのため、ファイルからデータを読み取ることができます。春が何をしているのか、すべてが適切です。もう少し説明させてください....

以下はあなたのプロパティファイルであると言ったように、

property1=prop1val
property2=${property1}

これはキーと値のペアを含むきれいなテキスト ファイルであり、変数を使用できないことに注意してください。ここで、 to の値property1property2動的にコピーしようとしても、それは起こりません。これは、プロパティ ファイルを使用する方法ではありません。

プロパティ ファイルは、キーと値のペアを含む単純なテキスト ファイルであると想定されています。そのため、アプリケーションまたはファイル内で必要なデータを論理的に構築できるように、キーをアトミックに保ちapplicationcontext.xmlます。

于 2012-05-02T13:26:18.560 に答える
0

を使用している理由がわかりませんPropertiesFactoryBean。次のことだけを試していただけますか (既に試したか、直面した問題があるかどうかはわかりません)

<bean id="propertyConfigurer"  
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  <property name="locations">
        <list>
            <!-- Order matters, last one to create a property wins! -->
            <value>classpath:default.properties</value>
            <value>file:${MYAPP_PROPERTIES_LOCATION:badurl}/application.properties</value>
            <value>file:${user.home}/developer.properties</value>
        </list>
    </property>
</bean>  
于 2012-05-02T15:08:30.973 に答える