Spring フレームワークで ehcache を使用しています。ehcache.xml を使用して ehcache を初期化しています。ただし、実行時に terracottaconfig などの特定のプロパティを追加したいと考えています。この目的のために、クラス EhCacheManagerFactoryBean をオーバーライドしました。現在、このクラスのメソッド getObject() をオーバーライドしています (クラスが ehcache.xml ファイルで初期化される前に他のメソッド setResource() および afterPropertiesSet() が呼び出されるため、これがオーバーライドするのに正しいメソッドかどうかはわかりません)。
これは私の春の設定ファイルです
<bean id="cacheManager"
class="com.dexknows.util.CustomEhCacheManagerFactoryBean">
<property name="configLocation">
<value>file:///${vp_data_dir}/ehcache.xml</value>
</property>
<property name="terracottaConfigUrl" value="#{dexProperties['terracottaConfig.Url']}"/>
</bean>
これは私がオーバーライドしたクラスメソッドです
public class CustomEhCacheManagerFactoryBean extends EhCacheManagerFactoryBean {
private String terracottaConfigUrl;
private Resource resourceConfiguration;
@Override
public void setConfigLocation(Resource configLocation) {
super.setConfigLocation(configLocation);
}
@Override
public void afterPropertiesSet() throws IOException, CacheException {
super.afterPropertiesSet();
}
@Override
public CacheManager getObject() {
CacheManager manager = super.getObject();
TerracottaClientConfiguration terracottaClientConfiguration = new TerracottaClientConfiguration();
terracottaClientConfiguration.setRejoin(true);
terracottaClientConfiguration.setUrl(terracottaConfigUrl);
manager.getConfiguration().setDynamicConfig(true);
manager.getConfiguration().terracotta(terracottaClientConfiguration);
Configuration().terracotta(terracottaClientConfiguration)));
return manager;
}
public String getTerracottaConfigUrl() {
return terracottaConfigUrl;
}
public void setTerracottaConfigUrl(String terracottaConfigUrl) {
this.terracottaConfigUrl = terracottaConfigUrl;
}
}
次の例外が発生しています:
「cacheManager」という名前の Bean の作成中にエラーが発生しました: FactoryBean がオブジェクトの作成時に例外をスローしました。ネストされた例外は java.lang.IllegalStateException です: net.sf.ehcache.config.Configuration.dynamicConfig は動的に変更できません
dynamicConfig="true" を設定しました
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false"
monitoring="autodetect"
dynamicConfig="true"
name="xyz">