Отключить кэширование метода spring через внешнее свойство
Я настроил кэширование метода spring с Ehcache и конфигурацией, управляемой аннотациями.
Я хотел бы, однако, иметь возможность отключить его из файла конфигурации, который мы используем в приложении.
моей первой мыслью было позвонить net.sf.ehcache.CacheManager.CacheManager()
без аргументов, если кэширование метода отключено. Это вызывает исключение:
java.lang.IllegalArgumentException: loadCaches must not return an empty Collection
at org.springframework.util.Assert.notEmpty(Assert.java:268)
at org.springframework.cache.support.AbstractCacheManager.afterPropertiesSet(AbstractCacheManager.java:49)
моей второй идеей было настроить net.sf.ehcache.CacheManager.CacheManager()
с данными по умолчанию, чтобы кэш не использовался (maxElementsInMemory 0 и т. д.). Зато кэш все еще используется, что не то, что я хочу.
есть свойство net.sf.ehcache.disabled
но я не хочу отключать кэширование hibernate, которое также использует ehcache.
Q
как я могу настроить все, чтобы иметь кэширование метода spring, но отключить его из моего внешнего файла конфигурации? Я не хочу изменять контекст приложения или код, чтобы включить/отключить кэширование метода. Можно изменить только файл конфигурации, который мы используем в приложении.
2 ответов
то, что я искал был NoOpCacheManager
:
чтобы заставить его работать, я переключился с создания XML-бобов на фабрику
Я сделал следующее:
@Bean
public CacheManager cacheManager() {
final CacheManager cacheManager;
if (this.methodCacheManager != null) {
final EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager();
ehCacheCacheManager.setCacheManager(this.methodCacheManager);
cacheManager = ehCacheCacheManager;
} else {
cacheManager = new NoOpCacheManager();
}
return cacheManager;
}
вы можете использовать весна профиль, чтобы включить (или нет) поддержку кэширования spring
<beans profile="withCache">
<cache:annotation-driven />
</beans>