@Override
@Transactional
public void testTransactional1() {
Dict dict=baseMapper.selectOne(new QueryWrapper().eq("d_code", "AAA"));
dict.setDValue("2");
baseMapper.updateById(dict);
try {
Thread.sleep(10000); // 10 s
} catch (InterruptedException e) {
e.printStackTrace();
}
Dict dictSS=baseMapper.selectOne(new QueryWrapper().eq("d_code", "AAA"));
System.out.println("dictSS="+ JSON.toJSonString(dict));
System.out.println("testTransactional1");
}
@Override
@Transactional
public void testTransactional2() {
Dict dict=baseMapper.selectOne(new QueryWrapper().eq("d_code", "AAA"));
System.out.println("dict="+ JSON.toJSonString(dict));
}
Executor threadPool = Executors.newFixedThreadPool(5);
threadPool.execute(new Runnable() {
public void run() {
dictService.testTransactional1();
}
});
threadPool.execute(new Runnable() {
public void run() {
dictService.testTransactional2();
}
});
输出:dict={"createTime":"2021-09-29 10:59:18","dCode":"AAA","dDesc":"测试","dType":1,"dValue":"1","did":5,"updateTime":"2021-09-29 10:59:18"}
dictSS={"createTime":"2021-09-29 10:59:18","dCode":"AAA","dDesc":"测试","dType":1,"dValue":"2","did":5,"updateTime":"2021-09-29 10:59:18"}
总结:操作同一行数据时,同一事务机制下,读取的是预提交的行数据;不同事务读取的是默认机制 iIsolation.REPEATABLE_READ(可重复读)



