【踩坑记录】使用ehcache缓存@Cacheable注解不生效的问题

遇到的问题为:给某个查询方法添加了@Cacheable注解,Junit测试通过,查询方法执行多次时只有第一次执行方法体,之后调用方法查询缓存,不进入方法体;但是在Controller内调用的时候多次调用发现每次都进入方法体,不走缓存。

查网上的解决办法大多为以下两种:

1、由于@Cacheable基于SpringAOP的动态代理机制,程序执行时会在代理的方法前做缓存处理,但是如果一个类(比如一个加了@Service注解的)内部方法A调用内部的@Cacheable方法B,则会直接调用方法不会进行相应的处理。解决办法是把A、B两个方法放进不同的Service中。

2、不采用注解的方式,直接采用编程方式,取到 Ehcache 的 CacheManger 对象,把需要缓存的数据放到里面,类似于使用 Map,缓存的逻辑自己控制;或者可以使用redis的缓存方式去添加缓存。

遇到的问题非如上两种,仅做记录。

解决办法

经过反复尝试,发现需要把ehcache的注解开关配置到application-context.xml和servlet-spring.xml也就是springmvc的配置文件里。如果只在context里面配置,那么只有Junit测试的时候缓存才会生效。具体原因还没搞清楚...

添加配置如下:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值