NESTED与REQUIRES_NEW区别(最全)

1、原理见上篇文章:Spring事务架构详解 https://www.jianshu.com/p/acf84a4ed3a3

2、对于下面例子,PROPAGATION_REQUIRES_NEW不是也可以实现么?

----并非如此,最根本区别:NESTED还在一个事务中,但是与主事务一块提交

1)、对于NESTED,B、C为A的子事务,可以读取A未提交的数据,但是REQUIRES_NEW却不行,除非B、C的隔离级别是Read Uncommitted。(跟support作用类似)

2)、如果A事务在B/C执行完后,还有更改数据库的操作,如果更改失败,那么B/C是要回滚的,对于B和C是REQUIRES_NEW(事务已提交)的情况下做不到。

3)、A与B/C方法中,可以修改同一条数据。但是对于REQUIRES_NEW会造成死锁。

4)、对于REQUIRES_NEW,B/C作为内部事务,提交后可以被修改,这会造成A的脏读

A.service(){

        try {

                // PROPAGATION_NESTED

                B.service();

        }catch(Exception e){

                //  PROPAGATION_NESTED

                C.service()

         }

    update();

 }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。