springboot + mybatisplus出现was not registered for synchronization because synchronization is not active
2024-10-21 04:12:12
原因一:缺少事务注解,底层mybatisplus的接口方法有事务
原因二:该服务器被限制访问要连接的数据库
原因三:乐观锁失效
乐观锁由@version注解标注,有以下使用要求
支持的数据类型只有:int、Integer、long、LonDate、Timestamp、LocalDateTime
整数类型下 newVersion = oldVersion + 1
newVersion 会回写到 entity 中
仅支持 updateById(id) 与 update(entity, wrapper) 方法
在 update(entity, wrapper) 方法下, wrapper 不能复用
拓展研究:
问题一、为什么每次都Creating a new SqlSession,会不会影响性能?
Creating a new SqlSession mybatis官方就是这么和spring整合的,SqlSession是对Connection的封装,Connection都在池里呢,没什么影响。
那个是信息,就是在一个数据库连接上,启动事务,创建一个对象来管理事务,就是在数据库连接上发出transaction.start,对象来记录相关信息。对性能影响很少
问题二、明明配置了事务,确提示事务没有交给spring管理,求解?
只有连接不是spring管理的(应该是应用服务器上建立的),实际上事务还是spring管理,报错还是会回滚。
乐观锁实现方式:
版本号
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
时间版本
- 实现MetaObjectHandler拦截器,对要判断的时间字段进行拦截,
- 时间字段加上对应注解 @TableField(value = "UPDATE_TIME",fill = FieldFill.UPDATE)
- 取出记录时,获取当前time
- 更新时,带上这个time
- 执行更新时, set time = newTime where version = oldTime
- 如果 time 不对,就更新失败
最新文章
- [LintCode] Longest Increasing Subsequence 最长递增子序列
- js中的 || &;&; !!
- ECSHOP v2.7.3注入漏洞分析和修复
- JQuery拖拽排序
- MVC网址路由与生命周期
- SQL注入原理
- easyUI之window
- php 常用几个函数
- Nine Great Books about Information Visualization
- 【转载】深入浅出http请求
- c/c++ 重载运算符 标准库function的用法
- Windbg程序调试系列1-Mex扩展使用总结
- Python Scrapy 爬取煎蛋网妹子图实例(二)
- 《Python》进程收尾线程初识
- Component Interface相关面试题
- Ubuntu 14.04 DNS 配置
- django 接口
- 【BZOJ】【2200】【USACO 2011 Jan】道路和航线
- CF825F String Compression 解题报告
- 用仿ActionScript的语法来编写html5——第一篇,显示一张图片