3

プロパティ プレースホルダーを使用していくつかのプロパティ ファイルを読み込もうとしています。アプリが実行される環境に基づいて異なるファイルを読み込めるように、システム プロパティを使用してファイルの 1 つの名前を指定したいと考えています。

最初に私は次のことを試しました:

<context:property-placeholder location="classpath:environment_common.properties,classpath:environment_${app_env}.properties" />

システム プロパティ (app_env) が正しく設定されていること (例: "bar") を検証しましたが、Spring が間違ったファイル (例: environment_foo.properties) をロードしています。

次にSpELを使ってみました:

<context:property-placeholder
        location="#{ 'classpath:environment_common.properties,classpath:environment_'.concat(systemProperties['app_env'] }.properties) }" />

しかし、context:property-placeholderSpEL をサポートしていないようです:

java.io.FileNotFoundException: Could not open ServletContext resource [/#{'classpath:environment_common.properties]

context:property-placeholder複数のプロパティ ファイルを区切るためにコンマを探す独自のパーサーがあるように見えますが、最初に値を SpEL に渡して評価するわけではありません。

をどのように使用すればよいですかcontext:property-placeholder、それともバイパスしてPropertyPlaceHolderConfigurer直接使用する必要がありますか?

4

2 に答える 2

1

今日、この問題に直面しました。これが私の解決策です:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" 
        value="classpath:#{(T(java.lang.System).getProperty('my.property', 'development.properties'))}"/>
</bean> 

定義済みの変数 systemProperties は使用しませんでしたが、必要に応じて使用できると思います。

于 2012-08-01T20:51:41.190 に答える
1

プロパティプレースホルダー要素で SpEL を直接使用しようとしたことはありません。ただし、バグが報告されているようです。かなり簡単な回避策として:

<context:property-placeholder properties-ref="props" />
<util:properties id="props" location="#{ your expression here }"/>
于 2011-08-05T04:39:53.430 に答える