请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Spring事务

老师,我想问下,就是2个请求同时到达一个被事务管理起来的方法中,该方法定义的事务的隔离级别为
读提交级别,传播行为是REQUIRED。
1、那是不是只要有一个请求进来都会开启一个新的事务?
2、在这个方法中,我用synchronized包裹了2个sql查询语句方法,一个是查询某行数据的一个字段值,一个是更新这行数据的那个字段值,
我想下老师,就是如果第一个请求线程先获取到了CPU资源,先进入了synchronized内,此时第二个请求线程等待,此时第一个请求线程做了查询这行数据的字段值,后修又改了这个字段值,接着第一个请求线程走出synchronized代码块,然后第二个请求线程进入了synchronized内,同样也是先查询那个字段值,然后修改那同一个值,那他先查询的值,是否是第一个请求线程更新后的值,还是说查询到的是第一个请求线程更新之前的值,

正在回答

2回答

翔仔 2019-09-18 00:30:20

同学好,1.Required:默认的事务传播行为,表示必须有逻辑事务,否则新建一个事务,使用PROPAGATION_REQUIRED指定,表示如果当前存在一个逻辑事务,则加入该逻辑事务,否则将新建一个逻辑事务:这里说的是同一次请求,不同请求会创建不同事务

2.主要看先获得锁的事务修改字段值了之后,是否已经提交了,如果已经提交了,那么第二个事务就能取到最新的值,否则还是原来的值

0 回复 有任何疑惑可以回复我~
  • 提问者 奶茶三兄弟d #1
    老师,这个是否提交,因为当前是事务管理的,那么是否跟synchronized包含的范围有关,如果包含到最后一行执行sql方法的地方,执行完,是否算已经提交事务了,还是说必须是第一个请求直到返回值后,请求结束,才算整个事务已经提交了,对这一块比较模糊,麻烦老师了
    回复 有任何疑惑可以回复我~ 2019-09-18 09:15:32
提问者 奶茶三兄弟d 2019-09-18 10:57:28

老师,我做了一个简单的测试,您看下,对嘛

1、第一种情况测试 : synchronized包含到请求结束

https://img1.sycdn.imooc.com//szimg/5d819a9f09e81f1313120692.jpg

如上图,事务二已经读取到了第一个事务更新后的值

日志信息如下图

https://img1.sycdn.imooc.com//szimg/5d819b1609bef04e17120756.jpg

但是也测试到了事务二没有读取到事务一更新后的值(可是事务一已经提交了,为什么事务二还不能读取到更新后的值呢)

如下图

https://img1.sycdn.imooc.com//szimg/5d819b670988dd8d17170773.jpg


第二种情况测试 : synchronized没有包含到请求结束

https://img1.sycdn.imooc.com//szimg/5d819bd7098234af13850599.jpg

https://img1.sycdn.imooc.com/szimg/5d819bd70986189d13040576.jpg

https://img1.sycdn.imooc.com//szimg/5d819b1609bef04e17120756.jpg

这种情况下的测试,事务二能读取的到,也会读取不到,我想的是,是不是sychronized包含的范围的问题,

可能事务一请求再走出sychronized代码块后,并没有争抢到CPU的资源,因此请求还没结束,没有执行到return这行语句,

而是事务二的请求争抢到了CPU资源,所以的话,这时候事务二也就读取不到事务一更新后的值了;


麻烦老师看下,都是按照自己想法和理解来的,也不知道是否正确,


0 回复 有任何疑惑可以回复我~
  • 翔仔 #1
    同学好,难能可贵你能自己去写测试来验证(虽然中间的数据看起来并不那么直观:),可以尝试记录下来后,再看看自己能否让自己看明白,这个对后面的工作有很大帮助),synchronized跟事务是否提交没有必然联系呀,同学可以加入显示的事务提交,这样更清晰一点,因为你synchronized之外的话事情,两个线程的执行顺序就没办法保证了,还是不能保证事务A先于B提交
    回复 有任何疑惑可以回复我~ 2019-09-18 23:49:09
  • 提问者 奶茶三兄弟d 回复 翔仔 #2
    哈哈,谢谢老师,下午又搞了一遍,看来以为自己懂了,实际上自己是一知半解的,看来自己不捣鼓下,并不能很深刻的去理解,太依赖吃现成的了
    回复 有任何疑惑可以回复我~ 2019-09-19 00:08:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信