Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果指定了EXCPATION,则Spring缓存名称必须为非null_Spring_Caching_Spring Cache - Fatal编程技术网

如果指定了EXCPATION,则Spring缓存名称必须为非null

如果指定了EXCPATION,则Spring缓存名称必须为非null,spring,caching,spring-cache,Spring,Caching,Spring Cache,我一直在尝试为我的项目实现一个基本的缓存,但在部署应用程序时遇到了一个错误 服务器:Tomcat7 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.

我一直在尝试为我的项目实现一个基本的缓存,但在部署应用程序时遇到了一个错误

服务器:Tomcat7

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配置

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

缓存1
缓存2
缓存3
我还尝试了spring文档中给出的配置

<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();
    }
@Cacheable(value=“cache1”,key=“#root.methodName”)
公共列表getAllObjects(){
返回objectDao.getAllObject();
}

在实现缓存时,有谁能告诉我这个问题可能从何而来。多亏了Stéphane Nicoll,我才找到了这个问题

如果指定,缓存名称必须为非空

这意味着我提供了一个空字符串来代替这样的缓存名称

@Cacheable(value = "", key = "#root.methodName")
    public List<ObjectDetails> getAllObjects() {
        return objectDao.getAllObjects();
    }
@Cacheable(value=”“,key=“#root.methodName”)
公共列表getAllObjects(){
返回objectDao.getAllObject();
}

提供了一个合适的名称并解决了该问题。谢谢。

例外情况与您的代码不匹配。我想说,您已经定义了一个缓存注释,其中的空字符串作为缓存名称。我觉得自己像个白痴……您在正确的位置……找到了一个空值的注释。。。。谢谢Stéphane。