Я использую конфигурацию на основе Java-аннотаций для инициализации кэширования на основе ehcache в Spring 3.1.
Вот пример кода ...
@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();
}
}
Существует допустимый файл ehcache.xmlс объявленным в нем 1 кешем.
Это все настройки, которые у меня есть для инициализации ehcache с помощью Spring.В приложении отсутствует инициализация на основе XML.
Во время выполнения я заметил, что cacheManager () инициализируется, как и ожидалось.После успешного выполнения код не может завершить инициализацию, допустив ошибку в:
CachingInterceptor.afterPropertiesSet () ->
if (this.cacheManager == null) {
throw new IllegalStateException("'cacheManager' is required");
}
Я провел некоторое исследование.
Кажется, что проблема возникает, когда CachingInterceptor инициализируется ProxyCachingConfiguration.
ProxyCachingConfiguration является производным от AbstractCachingConfiguration.
AbstractCachingConfiguration имеет метод с именем:
@PostConstruct
protected void reconcileCacheManager()
Этот методне вызывается.Если бы он был вызван, cacheManager, созданный в EhcacheConfig.cacheManger (), был бы правильно настроен для использования CacheInterceptor.afterPropertiesSet ().
Я не понимаю причину, по которой reconcileCacheManager () не вызывается до CacheInterceptor.afterPropertiesSet () вызывается.
Я что-то упустил?Может ли кто-нибудь помочь мне с проблемой, с которой я столкнулся?
Спасибо.