【踩坑记录】使用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测试的时候缓存才会生效。具体原因还没搞清楚...

添加配置如下:


    
        
    
    
        
    

 

你可能感兴趣的:(学习笔记,经验技巧)