2015-06-03 3 views
0

Я пытался реализовать базовое кэширование для моего проекта, но при попытке развертывания приложения я получаю сообщение об ошибке.Spring cache Кэш-имя должно быть не пустым, если указано excpetion

сервер: Tomcat 7

Spring Версия: 4.1.4

Caused by: java.lang.IllegalArgumentException: Cache name must be non-null if specified 
    at org.springframework.util.Assert.hasText(Assert.java:162) 
    at org.springframework.cache.interceptor.CacheOperation.setCacheNames(CacheOperation.java:66) 
    at org.springframework.cache.annotation.SpringCacheAnnotationParser.parseCacheableAnnotation(SpringCacheAnnotationParser.java:102) 
    at org.springframework.cache.annotation.SpringCacheAnnotationParser.parseCacheAnnotations(SpringCacheAnnotationParser.java:67) 
    at org.springframework.cache.annotation.SpringCacheAnnotationParser.parseCacheAnnotations(SpringCacheAnnotationParser.java:57) 
    at org.springframework.cache.annotation.AnnotationCacheOperationSource$2.getCacheOperations(AnnotationCacheOperationSource.java:124) 
    at org.springframework.cache.annotation.AnnotationCacheOperationSource.determineCacheOperations(AnnotationCacheOperationSource.java:142) 
    at org.springframework.cache.annotation.AnnotationCacheOperationSource.findCacheOperations(AnnotationCacheOperationSource.java:121) 
    at org.springframework.cache.interceptor.AbstractFallbackCacheOperationSource.computeCacheOperations(AbstractFallbackCacheOperationSource.java:140) 
    at org.springframework.cache.interceptor.AbstractFallbackCacheOperationSource.getCacheOperations(AbstractFallbackCacheOperationSource.java:100) 
    at org.springframework.cache.interceptor.CacheOperationSourcePointcut.matches(CacheOperationSourcePointcut.java:39) 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:225) 
    at org.springframework.aop.support.AopUtils.canApply(AopUtils.java:262) 
    at org.springframework.aop.support.AopUtils.findAdvisorsThatCanApply(AopUtils.java:294) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply(AbstractAdvisorAutoProxyCreator.java:118) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:88) 
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:69) 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:330) 
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:293) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1571) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
    ... 64 more 

Я попытался с помощью другой конфигурации менеджера кэша не повезло

здесь является XML configuarion

<cache:annotation-driven /> 
    <bean id="cacheManager" class="org.springframework.cache.concurrent.ConcurrentMapCacheManager"> 
     <constructor-arg> 
      <set> 
       <value>cache1</value> 
       <value>cache2</value> 
       <value>cache3</value> 
      </set> 
     </constructor-arg> 
    </bean> 

Я также попробовал конфигурацию, указанную на весенних документах

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> 
    <property name="caches"> 
     <set> 
      <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="cache1"/> 
      <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="cache2"/> 
     </set> 
    </property> 
</bean> 

функция Я пытаюсь кэшировать

@Cacheable(value = "cache1", key = "#root.methodName") 
    public List<ObjectDetails> getAllObjects() { 
     return objectDao.getAllObjects(); 
    } 

Может ли один момент мне туда, где эта проблема может возникнуть при реализации с кэшированием.

+0

Исключение не соответствует вашему коду. Я бы сказал, что вы определили аннотацию кэша с пустой строкой в ​​качестве имени кеша. –

+0

Я чувствую себя идиотом ... ты, где правильно ..... нашел одну аннотацию с пустым значением .... Спасибо Стефан. – SlOtErJaCk

ответ

0

Благодаря Stéphane Nicoll я смог найти этот вопрос

имя кэша должен быть ненулевым, если указано

Это означает, что я предоставил пустую строку вместо имени кэша как это.

@Cacheable(value = "", key = "#root.methodName") 
    public List<ObjectDetails> getAllObjects() { 
     return objectDao.getAllObjects(); 
    } 

При условии подходящего названия и разрешения. Благодарю.