2

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">
4

2 に答える 2

3

EhCacheManagerFactoryBean クラスのソースコードを分析したところ、「terracottaConfigConfiguration」を動的に変更できないことがわかりました。動的に変更できるのは、enum DynamicProperty に記載されているプロパティのみです。それでも、誰かがドキュメントを見つけて同じことを言及していれば、それは役に立ちます。

于 2012-07-11T22:22:39.083 に答える
1

いくつかの動的プロパティのみがあります。

  • timeToIdleSeconds
  • timeToLiveSeconds
  • maxElementsInMemory
  • maxElementsOnDisk

これらは、 (「動的構成」)の公式Javadoc で言及されています。net.sf.ehcache.config.CacheConfiguration

于 2012-07-14T17:51:25.843 に答える