Spring4+Hibernate4配置Ehcache

最近自己的项目应用到缓存,就打算搭建一下spring4+hibernate4+ehcache,没想到搭建缓存项目,会出现这个小问题。

首先是开启hibernate的二级缓存配置,代码如下:

<!-- hibernate 二级缓存 -->
<prop key="hibernate.cache.use_second_level_cache">true</prop>

        其次是开始hibernate的查询缓存,代码如下:

<!-- hibernate 查询缓存 -->
        <prop key="hibernate.cache.use_query_cache">true</prop>

        再者配置ehcache与hibernate结合的类,因为要和spring共用所以直接配置如下:

<!-- 由于spring也使用了Ehcache, 保证双方都使用同一个缓存管理器 -->
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>


        以上就是hibernate配置部分,之后就是该配置spring部分了,代码如下:

 <!-- 开启注解 -->
    <cache:annotation-driven cache-manager="cacheManager" proxy-target-class="true"/>


<!-- ehcache缓存配置 -->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehCacheManager"/> 
</bean>

<!-- cacheManager -->
<bean id = "ehCacheManager" class = "org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:resource/config/spring/ehcache.xml"/>
<property name="cacheManagerName" value="sampleCache1"/>
<property name="shared" value="true"/>
</bean>

        以为这样就可以了,毕竟网络上大部分都是这样配置的,可是却存在问题,首先hibernate部分cache已经配置没有问题了,重点问题出现在spring中,因为我的spring的cache配置放在hibernate配置下方,又在EhCacheManagerFactoryBean中设置shared为true,这个属性的设置顾名思义就是保证spring和hibernate公用一个缓存管理器,

因为我把hibernate放在spring的前面,所以在spring扫描EhCacheManagerFactoryBean的时候其实cacheManager已经存在,这样你在ehcache.xml中配置的各种内容都无法读取,spring无法对其实例化。这样就会引发一个问题,就是你在应用@Cacheable(value="TEST")的时候,就会报错,TEST这个value值没有找到。

这时候你会很纳闷,我明明在ehcache的配置文件中配置了TEST啊,怎么会找不到?原因就是你把spring实例化ehcache的配置代码放到了hibernate配置的后边。

知道了原因就简单了,有两种解决办法:

      1.将shared更改为true,这样会存在两个缓存管理器,虽然能解决上边的问题但是会存在两个缓存管理器,感觉很怪

      2.将两段配置代码调换位置,这样就解决了,容器中还只存在一个缓存管理器。完美!

这样完成之后,我可以得到两个验证,第一、spring实例化bean是按照顺序实例化的。第二、<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>配置完后,如果不存在cacheManager,它会新建立一个。

这个坑了我一天……,自己太大意了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值