MyBatis如何禁用掉一级缓存。
来源:互联网 发布:华为mate8自带软件 编辑:程序博客网 时间:2024/05/22 02:03
一级缓存:同一个sqlsession里面存在,缓存用map存储。
key:sqlsession.hashcode+statementId+sql value:查询出来的对象。
二级缓存:不同sqlsession之间共享查询结果集。
1、 在配置文件SqlMapConfig.xml中加入以下内容(开启二级缓存总开关):cacheEnabled设置为 true
2、 每个mapper里面的每个sql可以配置useCache 来开启和关闭二级缓存。在做一个实时支付项目时遇到一个一级缓存导致的重复记账的问题。
业务场景:业务系统+第三方支付系统。业务系统记账,向第三方发送支付请求,第三方支付异步返回支付结果。
在一段时间内,第三方支付将同一个单号,重复告知业务系统支付成功,按理来说同一个单号只需通知一次,
但是第三方支付抽风了,老是重复告知。
当然就算第三方支付系统重复告知业务系统,业务系统也有校验的。但是问题就是没有校验住。
支付里面有一段如下的代码,在同一个方法内,该方法带事务的。
1。根据ID查询单据详细信息。调用方法A
2。一些逻辑处理
3。分布式应用下利用:select for update 对某个主体进行加锁。(中间会等待锁)
4。加锁之后,再根据同一个ID进行查询单据。调用方法A(此处重复查询是为了避免 单据状态已经改变了)
此时查看log日志,方法A虽然被调用了两次,但是日志只打印了一次。此时确认了是一级缓存导致的,同一个事务 同一个session,同一个sql.
为了使这个sql的失效,加了一个随机串到SQL里面。
两次查询分别用 (int)Math.random()*1000 (int)Math.random()*10000
where #{randomString}=#{randomString}
- MyBatis如何禁用掉一级缓存。
- MyBatis中如何禁用缓存
- MyBatis一级缓存
- Mybatis一级缓存
- Mybatis一级缓存
- MyBatis 一级缓存实现
- mybatis的一级缓存
- MyBatis-一级缓存
- mybatis一级缓存
- mybatis中一级缓存
- mybatis一级缓存
- mybatis的一级缓存
- MyBatis的一级缓存
- Mybatis一级缓存原理
- MyBatis一级缓存,二级缓存
- MyBatis 一级缓存,二级缓存
- MyBatis中的一级缓存
- Mybatis一级缓存 去除
- ERP实施顾问工作中应努力做到哪些?
- iOS Https协议 自签证书访问数据
- 字符串加解密
- hdu 1828 Picture(线段树,扫描线之周长并)
- Spring的BeanFactoryPostProcessor和BeanPostProcessor
- MyBatis如何禁用掉一级缓存。
- synchronized
- js错误捕获
- python根据类名映射
- java.util.vector中的vector的详细用法
- BeanFactoryPostProcessor和BeanPostProcessor的区别
- uboot的常用命令
- 六位设计师分享的数位板使用经历
- iOS - 百度地图最基本操作(定位,手势添加自定义标注)