分布式事务(2)Spring事务

2.1 Spring事务原理

Spring支持编程式事务和声明式事务。编程式事务就是用个事务类TransactionTemplate来管理事务,现在基本没人用。声明式事务分成在xml里配置个AOP来声明个切面加事务,目前也比较少人用,大部分情况下都是用@Transactional注解。

@Transactional注解,根据阿里编码规范,一般建议加在方法级别,就是要事务的方法就加事务,不要事务的方法就别加事务,否则很多一个数据库操作的方法。另外这个注解一般要加rollbackFor,指定哪些异常类型才要回滚事务。还有就是有个isolation属性,可以自己手动调整事务的隔离级别。

Spring事务的基本原理:


Spring事务的基本原理.png

Spring事务框架源码初探:


Spring事务框架源码初探.png

2.2 Spring事务传播行为

public class ServiceA {
       @Autowired
       private ServiceB b;

       @Transactional
       public void method() {
           // 数据库操作
            b.methodB();
       }
}

public class ServiceB {

       @Transactional
       public void method() throws Exception { 
           //数据库操作 
       }
}

PROPAGATION_REQUIRED:默认,如果ServiceA.method调用了ServiceB.method,如果ServiceA.method开启了事务,然后ServiceB.method也声明了事务,那么ServiceB.method不会开启独立事务,而是将自己的操作放在ServiceA.method的事务中来执行,ServiceA和ServiceB任何一个报错都会导致整个事务回滚。

PROPAGATION_SUPPORTS:如果ServiceA.method开了事务,那么ServiceB就将自己加入ServiceA中来运行,如果ServiceA.method没有开事务,那么ServiceB自己也不开事务。

PROPAGATION_MANDATORY:必须被一个开启了事务的方法来调用自己,否则报错。

PROPAGATION_REQUIRES_NEW:ServiceB.method强制性自己开启一个新的事务,然后ServiceA.method的事务会卡住,等ServiceB事务完了自己再继续。这就是影响的回滚了,如果ServiceA报错了,ServiceB是不会受到影响的,ServiceB报错了,ServiceA也可以选择性的回滚或者是提交。

PROPAGATION_NOT_SUPPORTED:就是ServiceB.method不支持事务,ServiceA的事务执行到ServiceB那儿,就挂起来了,ServiceB用非事务方式运行结束,ServiceA事务再继续运行。这个好处就是ServiceB代码报错不会让ServiceA回滚。

PROPAGATION_NEVER:不能被一个事务来调用,ServiceA.method开事务了,但是调用了ServiceB会报错

PROPAGATION_NESTED:开启嵌套事务,ServiceB开启一个子事务,如果回滚的话,那么ServiceB就回滚到开启子事务的这个save point。

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

推荐阅读更多精彩内容

  • 一、事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供...
    芭蕾武阅读 5,590评论 3 12
  • 这部分的参考文档涉及数据访问和数据访问层和业务或服务层之间的交互。 Spring的综合事务管理支持覆盖很多细节,然...
    竹天亮阅读 4,642评论 0 0
  • 事务的嵌套概念 所谓事务的嵌套就是两个事务方法之间相互调用。spring事务开启 ,或者是基于接口的或者是基于类的...
    jackcooper阅读 5,258评论 0 10
  • 引言: 在Spring中@Transactional提供一种控制事务管理的快捷手段,但是很多人都只是@Transa...
    _许帅_阅读 4,342评论 0 2
  • 一、事务简单介绍 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 1.1 事...
    tuacy阅读 117,036评论 11 110