Liekkas_BX 2020-12-11 16:38 采纳率: 0%
浏览 382

Spring 事务隔离级别read-committed复现不了“不可重复读”的问题

本着“实践是检验真理的唯一标准”的精神,如题,想模拟出读已提交隔离级别下可能出现的不可重复读问题,自己写了代码验证,但并没有出现预想中的数据不一致问题,各位看官可否帮看下是否有哪不妥?

两个事务方法,按先后调用,事务一执行过程中暂停,此时事务二执行完毕,事务一再次查询,结果与第一次查询并没有不同。

代码:

    @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
    public void transactionOne() {
        //代码块1 开始
        TestEntity entity = testDao.selectById(1);
        int countAll = testDao.selectCount(null);
        log.info("事务一:ID为1的数据首次查询name为:{},数据总条数为:{}", entity.getName(), countAll);
        //代码块1 结束
        try {
            log.info("事务一:暂停10秒,请开启第二个事务!");
            Thread.sleep(10000);
            log.info("事务一:暂停10秒完成");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //位置1
        entity = testDao.selectById(1);
        log.info("事务一:ID为1的数据再次查询name为:{}", entity.getName());
        log.info("事务一:再次查询数据记录条数为:{}", testDao.selectCount(null));
    }

    @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
    public void transactionTwo() {
        TestEntity entity = new TestEntity();
        entity.setCode(4);
        entity.setName("事务二添加的数据");
        entity.setIndustryId(1);
        testDao.insert(entity);
        log.info("事务二:新加数据记录完成,数据ID为4");
        entity = testDao.selectById(1);
        entity.setName("事务二中设置的新name");
        testDao.updateById(entity);
        log.info("事务二:更新ID为1的数据name值完成");
    }

执行结果:

事务一:ID为1的数据首次查询name为:初始值,数据总条数为:2
事务一:暂停10秒,请开启第二个事务!
事务二:新加数据记录完成,数据ID为4
事务二:更新ID为1的数据name值完成
事务一:暂停10秒完成
事务一:ID为1的数据再次查询name为:初始值       此两行有疑问!!!
事务一:再次查询数据记录条数为:2

  • 写回答

3条回答 默认 最新

  • MLi_hb 2020-12-12 17:59
    关注

    1.判断下你的注解事务是否生效
    2.代码执行完毕并不意味着事务就立刻提交
    3.可以使用数据库客户端去测试,比使用代码要灵活些。

    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?