使用spring 注解方式自定义事务隔离级别

遇到的问题

在主线程中开启了一个子线程。主线程和子线程都是带事务的。然后子线程中需要获取主线程中刚刚在数据库新增的数据信息。数据库使用的是mysql,由于默认的隔离级别是可重复读,在一定情况下会由于主线程的事务没有提交,导致子线程中获取不到主线程刚刚新增的数据。导致失败。

处理思路

将子线程的事务隔离级别,由默认级别临时调整为读未提交的隔离级别

具体方法

数据库操作步骤

  1. 开启第一个查询窗口,修改当前查询的事务隔离级别为读未提交。具体修改命令及过程如下:
#查看当前的事务隔离级别
//查看当前事物级别:
SELECT @@session.tx_isolation;
-> 应该是可重复读的级别

#设置read uncommitted级别:
set session transaction isolation level read uncommitted;
#设置read committed级别:
set session transaction isolation level read committed;
#设置repeatable read级别:
set session transaction isolation level repeatable read;
#设置serializable级别:
set session transaction isolation level serializable;

设置完毕之后重新查询一次,应该变成自己设置的级别
  1. 开启一个新的查询窗口作为第二个查询,。在第二个查询窗口开始一个事务,修改数据,但不提交
  2. 返回第一个窗口查询刚刚窗口2修改的数据,可能查询到,证明临时修改事务隔离级别生效。

使用spring注解修改隔离级别

通过mysql修改事务隔离级别方式,只需要在声明的注解上添加即可

@Transactional(isolation = Isolation.READ_UNCOMMITTED)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值