业务上需要把一些数据放到redis里面,但是系统逻辑代码差不多编写完成了,怎么整?用Spring Cache啊,对既有业务逻辑侵袭极小。

于是尝试调查了一下,遇到一些问题分享一下(本文使用Spring MVC,不使用Spring Boot)

1.配置:

<!--启用缓存-->
<cache:annotation-driven cache-manager="cacheManager"/>
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<!-- 这里可以配置多个redis -->
<bean class="com.xxx.cache.RedisCache">
<property name="redisTemplate" ref="redisTemplate" />
<property name="name" value="yyy"/>
<!-- name对应的名称要在类或方法的注解中使用 可以指定多个cache管理模式 -->
</bean>
</set>
</property>
</bean>

2.代码中使用

@Cacheable(value="yyy",key="#root.target.getCompanyID()+#xxxId")
public List<XXXInfo> getXXXData(int xxxId) {

3.遇到的坑1:Cache机制不被触发

原因:getXXXData()是个内部方法,在同一个Service1的另外一个方法中被内部调用,不是直接被Controller调用的。
解决:在同一个Service1中,自注入(Self autowiring),这货好像Spring4.3之前还不支持
@Autowired
Service1 self // 调用的地方
self.getXXXData(xxxId);

4.遇到的坑2:Key上面的SpEL表达式使用了基类的方法getCompanyID(),报错找不到方法。EL1004E: Method call: Method getCompanyID()  cannot be found on org.springframework.cache.interceptor.CacheExpressionRootObject type

解决:坑了个爹了,基类的方法是protected类型的,改成public就可以了

最新文章

  1. [开发笔记]GCC 分支预测优化
  2. unbuntu14.04 安装nginx配置
  3. Java通过几种经典的算法来实现数组排序
  4. 15个最佳的代码评审(Code Review)工具
  5. ASP.NET MVC图片上传前预览
  6. supersr--NSURLSessionConfiguration-下载进度
  7. Objective-c文件读取
  8. 转 Citrix XenCenter安装VM之挂载ISO详解
  9. Ubuntu下命令行cd进不了/home/用户目录
  10. ubuntu scp
  11. IsNullOrEmpty和s == null || s.Length == 0哪个快
  12. Ajenti 1.0 发布,服务器管理系统 - 开源中国社区
  13. MongoDB与Redis的比较
  14. 动力IT教育背后的“神秘力量”
  15. 面向对象oop
  16. 微信小程序 canvas 文字自动换行
  17. Docker版本与安装介绍
  18. [Go] golang缓冲通道实现管理一组goroutine工作
  19. loadrunner -vuser
  20. vsftpd中的local_umask和anon_umask

热门文章

  1. git fatal: remote origin already exists错误解决方案
  2. 283.移动零 关于列表list与remove原理*****(简单)
  3. 04-numpy-笔记-transpose
  4. C++面向对象程序设计学习笔记(7)
  5. linux在目录下查字符串, 查文件数目
  6. vertica 中位数函数 MEDIAN 的使用
  7. Laravel HTML导出 PDF ----- wkhtmltopdf Laravel-snappy
  8. VUE的$refs和$el的使用
  9. HTML+css基础 三大列表
  10. SQL ------------- 最大与最小函数