カスタム プロパティ プレースホルダーを Spring の新しいサポートに移植しようとしてEnvironment
いますが、現在のプレースホルダー マジックの機能を取得する方法がわかりません。
私が望むのは、デフォルトの一連のプロパティ ファイルをクラスパスから読み取り、それらのプロパティを別の場所からの一連のプロパティ ファイルによってオーバーライド (オーバーレイ) することです。他のグループのファイルに設定されているものだけをすべてのプロパティに置き換えたくありません。
Spring 3.1 より前
<bean class="com.snaphop.spring.ConfigResourcesFactoryBean" id="customConfig">
<property name="parameterName" value="customConfig"/>
<property name="defaultResources" value="classpath*:META-INF/spring/*.properties"/>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="customPropertyPlaceholder">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="locations" ref="customConfig"/>
</bean>
これで ConfigResourcesFactoryBean は、プレースホルダー構成にフィードするリソースのリストを見つける魔法のような FactoryBean になりました。
public class ConfigResourcesFactoryBean implements FactoryBean<Resource[]> {
// Loads a bunch of Resources (property files)
// based on System.property/Environment variable "customConfig"
}
customConfig は-DcustomConfig=file://blah/*.properties
またはのように設定できますexport customConfig=file://blah/*.properties
。
ディレクトリのプロパティはblah
、classpath*:META-INF/spring/*.properties
. Resource[]
したがって、工場から返されたものはclasspath*:META-INF/spring*.properties
、それぞれに続くの結合になりfile://blah/*.properties
ます。
Resource[]
これで、工場の代わりにカスタムPropertySources
を作成して PlaceholderConfig に配線できるようになりましたが、上記の値を提供していないようです。
サーブレット環境でのみ機能し、したがって統合テストでは機能しないことを誓うため、使用できませんApplicationContextInitializer
(単体テストのすべてに注釈を追加して、環境が何であるかを伝える気がしません前に行ったようにシステム プロパティを設定します)。
一連のクラスをオーバーライド/実装することなく、ハードコードされたソースのプロパティをカスタム ソースでオーバーレイするにはどうすればよいですか?