为Spring3.1.1和Hibernate配置EHCache

时间:2012-03-09 15:40:54

标签: java spring hibernate ehcache

我试图在使用Hibernate 3.5.5的现有Spring 3.1.1应用程序中启用对象缓存。我使用的是ehcache 2.2.0。在我的applicationContext中,我添加了配置以使用EHCache打开缓存。

<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
    p:cache-manager="ehcache" />
<bean id="ehcache"
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
    p:config-location="ehcache.xml" />

然后我创建了ehcache.xml文件:

<diskStore path="java.io.tmpdir" />

<defaultCache 
    eternal="false" 
    maxElementsInMemory="1000"
    overflowToDisk="false" 
    diskPersistent="false" 
    timeToIdleSeconds="0"
    timeToLiveSeconds="0" 
    memoryStoreEvictionPolicy="LRU"/>

<cache name="studentCache" 
    eternal="false"
    maxElementsInMemory="10000" 
    overflowToDisk="false" 
    diskPersistent="false"
    timeToIdleSeconds="0" 
    timeToLiveSeconds="0"
    memoryStoreEvictionPolicy="LRU" /> 

我在ehcache的pom.xml文件中添加了必要的依赖项。但现在我收到了这个错误:

Initialization of bean failed; 
nested exception is org.springframework.beans.ConversionNotSupportedException: 
Failed to convert property value of type 'java.lang.String' to required type
'net.sf.ehcache.CacheManager' for property 'cacheManager'; 
nested exception is java.lang.IllegalStateException: 
Cannot convert value of type [java.lang.String] to required type
[net.sf.ehcache.CacheManager] for property 'cacheManager': 
no matching editors or conversion strategy found

有没有人知道造成这种情况的原因是什么?

4 个答案:

答案 0 :(得分:13)

您需要以不同方式引用cacheManager属性。这就是我的工作方式:

<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
 <property name="cacheManager"><ref local="ehcache"/></property>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml"/>

答案 1 :(得分:11)

@ aweigold的回答是完美的,但是如果使用“p:cacheManager-ref”传递“ehcache”bean的引用,则可以实现更清晰的解决方案。

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
    p:cacheManager-ref="ehcache" />

答案 2 :(得分:2)

包括以下依赖

<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache-core</artifactId>
    <version>2.3.1</version>
</dependency>

答案 3 :(得分:0)

与上一篇文章中的相同,只是在属性名称中没有错误:

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehcache" />