私は、Spring 3.1でehcacheベースのキャッシュを初期化するためのjava注釈ベースの設定を使用しています。ここでEhcacheベースのキャッシュのJavaベースの設定が動作しない
はそれで宣言された1つのキャッシュと有効ehcache.xmlがあり
@Configuration
@EnableCaching
public class EhcacheConfig implements CachingConfigurer {
.....
@Bean
public CacheManager cacheManager() {
.....
EhCacheManagerFactoryBean bean = new EhCacheManagerFactoryBean();
bean.setCacheManagerName(CACHE_MANAGER);
bean.setShared(Boolean.TRUE);
File file = new File(property + Constants.Slash + EHCACHE_XML);
bean.setConfigLocation(new FileSystemResource(file));
try {
bean.afterPropertiesSet();
} catch (Exception e) {
throw new RuntimeException(e);
}
EhCacheCacheManager cm = new EhCacheCacheManager();
cm.setCacheManager(bean.getObject());
return cm;
}
public KeyGenerator keyGenerator() {
return new DefaultKeyGenerator();
}
}
...サンプルコードです。
これは、Springでehcacheを初期化するために必要なすべての設定です。アプリケーションにXMLベースの初期化はありません。
実行時に、期待通りにcacheManager()が初期化されていることがわかりました。その実行が成功した後、コードは中出し誤ることにより、初期化を完了するために失敗します。
CachingInterceptor.afterPropertiesSet() - >
if (this.cacheManager == null) {
throw new IllegalStateException("'cacheManager' is required");
}
私はいくつかの調査を行っています。
CachingInterceptorがProxyCachingConfigurationによって初期化されているときに問題が発生しているようです。
ProxyCachingConfigurationはAbstractCachingConfigurationから派生しています。このメソッドが呼び出されていない
@PostConstruct
protected void reconcileCacheManager()
:
AbstractCachingConfigurationと呼ばれる方法があります。それが呼び出されていれば、EhcacheConfig.cacheManger()でインスタンス化されたcacheManagerは、CacheInterceptor.afterPropertiesSet()によって使用されるように正しくセットアップされていました。
CacheInterceptor.afterPropertiesSet()が呼び出される前にreconcileCacheManager()が呼び出されない理由はわかりません。
何か不足していますか?私が直面している問題を助けてくれる人がいますか?
ありがとうございます。
Springコンテナは、ContextLoaderListenerのAnnotationConfigWebApplicationContextコンテキストクラスを使用して初期化されます。 – dhpd
深く掘り下げて、@ PostConstructアノテーションが機能するためには、jsr-250 jarが/ WEB-INF/libにある必要があることが分かりました。私は(http://mvnrepository.com/artifact/javax.annotation/jsr250-api)からダウンロードして正常に動作しました。 クリス、多くのお手伝いをいただきありがとうございます。 – dhpd
@dhpd、aha - はい、Java SE 1.5に対して実行している場合、JSR-250注釈はデフォルトでは使用できず、スタンドアロン形式に含める必要があります。 Java 1.6では逆のことが言えます - @ PostConstructとフレンドは標準ディストリビューションに含まれており、スタンドアロンのjarファイルはもはや必要ありません。 –