18

以前は、クラスパス上のファイルからプロパティをロードする方法がありました:

<context:property-placeholder location="classpath:myConfigFile.properties" />

そしてそれはうまくいきました。しかし今、クラスパスにないシステム上の特定のファイルからプロパティをロードしたいと考えています。ファイルを動的にロードできるようにしたかったので、Java 環境変数を使用してファイルを設定しています。以下に簡単な例を示します。

Java の場合:

  System.setProperty("my.prop.file", "/path/to/myConfigFile.properties");

Spring XML の場合:

<context:property-placeholder location="${my.prop.file}" />

ルチアーノのアイデアのおかげで、私はこの方法でも試しました:

<context:property-placeholder properties-ref="prop" />

<util:properties id="prop" location="reso"/>

<bean id="reso" class="org.springframework.core.io.FileSystemResource">
    <constructor-arg index="0" value="${my.prop.file}" />
</bean>

私が試したことはすべて失敗しました。my.prop.file を何に設定しても。最大のヒットは次のとおりです。

<context:property-placeholder location="/path/to/myConfigFile.properties" />
(ClassNotFoundException: .path.to.myConfigFile.properties)

<context:property-placeholder location="file:/path/to/myConfigFile.properties" />
(ClassNotFoundException: file:.path.to.myConfigFile.properties)

<context:property-placeholder location="file:///path/to/myConfigFile.properties" />
(ClassNotFoundException: file:...path.to.myConfigFile.properties)

クラスパスではなくファイルシステム上にある場所でプロパティプレースホルダーをどのように使用しますか? Spring 3.0.5 を使用しています。

spring ファイルをロードする Java プログラムを実行するスクリプトに問題があることがわかりました。助けてくれてありがとう。結局、元のコードが機能するため、この質問を削除するように要求します。ご協力ありがとうございました。

4

2 に答える 2

16

これは私にとってはうまくいきました:

<context:property-placeholder location="file:/path/to/myConfigFile.properties" />

しかし、これは(興味深いことに)そうではありませんでした:

<context:property-placeholder location="#{ systemProperties['foo'] }" />

私は得た

java.io.FileNotFoundException: Could not open ServletContext resource [/#{ systemProperties['foo'] }]

${..}PropertyPlaceholderConfigurer の定義でプロパティ プレースホルダーを使用することはできません。卵より先に鶏です。

いつでも PropertyPlaceholderConfigurer をサブクラス化して、必要なことを実行させることができます (たとえば、メソッドを呼び出しますsetLocations()@PostConstruct次に、を使用する代わりに、次を<context:property-placeholder>使用します。

<bean class="com.foo.MyPropertyPlaceholderConfigurer"/>
于 2012-05-11T03:49:27.453 に答える
6

この方法はどうですか?

<context:property-placeholder properties-ref="prop" />

<util:properties id="prop" location="reso"/>

<bean id="reso" class="org.springframework.core.io.FileSystemResource">
    <constructor-arg index="0" value="/yourpathandfile" />
</bean>
于 2012-05-10T19:55:14.447 に答える