首页 > 其他分享 >springboot + mybatisplus出现was not registered for synchronization because synchronization is not acti

springboot + mybatisplus出现was not registered for synchronization because synchronization is not acti

时间:2022-10-19 18:46:20浏览次数:53  
标签:事务 because mybatisplus version spring 更新 synchronization time

原因一:缺少事务注解,底层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 不对,就更新失败

标签:事务,because,mybatisplus,version,spring,更新,synchronization,time
From: https://www.cnblogs.com/dreamzy996/p/16807314.html

相关文章