@CachePut 使用中遇到的问题
简要说明:在使用Spring cache + ehcahce 中,遇到的最大问题就是使用@CachePut 注解时,插入或者更新的结果,通过缓存取不出来,一直是[]或者null的状态。在查看很多博客之后,外加实践,得出一下结果:
- 对应的@Cacheable和@CachePut,属性的key要保持一致,key不相同,将会得到不一致的数据结果
- 返回数据类型要一致,返回数据类型不同会导致获取缓存数据有误
直接上正确的代码结构
之前走了不少弯路,将@CachePut的返回类型 与 @Cacheable 的返回类型不一致,导致结果一直不正确。记录一下,以备查看。
记录一下关于ehcache的东西,以后可能会用到:
<cache:annotation-driven/>
还可以指定一个mode属性,可选值有proxy和aspectj。默认是使用proxy,即代表使用接口方式进行缓存,aspectj 直接对.class进行操作,如果项目中,没有实现接口,应该将mode改为aspectj。
<cache:annotation-driven/>
还可以指定一个proxy-target-class属性,表示是否要代理class,默认为false。我们前面提到的@Cacheable、@cacheEvict等也可以标注在接口上,这对于基于接口的代理来说是没有什么问题的,但是需要注意的是当我们设置proxy-target-class为true或者mode为aspectj时,是直接基于class进行操作的,定义在接口上的@Cacheable等Cache注解不会被识别到,那对应的Spring Cache也不会起作用了。