アプリケーション固有のプロパティー・ファイルで構成されたプロパティーに基づいてキャッシュ・マネージャーを作成するファクトリー Bean を作成しました。
概念は、それぞれが他の構成プロパティを使用して、複数の実装を選択できるということです。
例えば:
- noop キャッシュ、パラメーターなし、
- #max オブジェクトの ehcache
- 複数の IP とポートが構成された memcache。
application-context.xml
ですべてのキャッシュ アプリケーション固有のパラメータを指定するのではなく、既存のプロパティ ソースからそれらを読み取るのがよいと思います。
私の試みは、EnvironementAware
インターフェイスを使用してにアクセスすることでしたEnvironement
。しかし、を使用して構成されているプロパティ ファイルは、.xml ファイルには<context:property-placeholder>
含まれていないようPropertiesSources
です。
example.properties
cache.implementation=memcached
cache.memcached.servers=server1:11211,server2:11211
アプリケーションコンテキスト.xml
<context:property-placeholder location="example.properties"/>
<bean id="cacheManager" class="com.example.CacheManagerFactory"/>
CacheManagerFactory.java 内
public class CacheManagerFactory implements FactoryBean<CacheManager>, EnvironmentAware {
private Environement env;
@Override
public CacheManager getObject() throws Exception {
String impl = env.getRequiredProperty("cache.implementation"); // this fails
//Do something based on impl, which requires more properties.
}
@Override
public void setEnvironment(Environment env) {
this.env = env;
}
@Override
public Class<?> getObjectType() {
return CacheManager.class;
}
@Override
public boolean isSingleton() {
return true;
}
}