spring @Transactional 隔离级别没有达到预期的效果

2017-10-09 11:34:09 +08:00
 nightYe

@Transactional(isolation = Isolation.READ_UNCOMMITTED)

public void test(int id) {
    User user = userMapper.getOne(1L);
    System.out.println(user.toString());
    int resultStatus = userMapper.updateUser();
    System.out.println(resultStatus);
    if(id == 1) {
        try {
            Thread.sleep(20000); // 20 s
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

issue: 两次请求访问同一个方法 test,第一次请求 param=1,更新 user 表 id=1 的用户信息,然后睡眠线程 20S,在此期间,第二次请求过来,param=2,此时按照理想状态下,应该是直接查询到的 user 是修改过后未 commit 的 user,并且不会被阻塞,直接结束,但是实际情况是 User user = userMapper.getOne(1L)查询到的还是未被修改之前的 user,而且线程因为第一次请求阻塞的原因,也被阻塞了;

我在 mysql 里开启事务,然后跟新用户信息,不提交事务,然后访问这个方法的时候,是能拿到更新后未提交的数据的,是 sleep 的线程出现了问题吗;

等一个吊大的大佬;

1359 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/396113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX