Spring中事务传播

首先要有前导知识,知道单个事务的情况下程序提交还是回滚是取决于是否有异常,有异常则回滚,无异常则提交。
在没有使用Spring的时候,在服务之间调用的时候,只要我们在操作数据库的时候使用的是同一个连接,则就能保证是同一个事务。所以只要把Connection作为参数传递给下一个服务即可。
但是使用Spring以后,所有的服务(Spring中的Bean元素)和事务都是交由Spring管理,所以按之前的操作仍是可以处理事务,但是Spring为提供了两种事务管理方式,更应该使用Spring提供的事务管理方式。而Spring中的事务管理分为声明式事务和编程式事务。

说到事务的传播,必定是在两个及其以上才成为传播,而我们说的传播则是在两个事务之间的传播,咬文嚼字的可以说,传播者和被传播者。即使有多个事务,从内向外两两依次处理,此处我们称外层事务和内层事务。

1REQUIRED:Support a current transaction, create a new one if none exists.Analogous to EJB transaction attribute of the same name.This is the default setting of a transaction annotation.(有则执行当前事务,无则新建新事务)

2SUPPORTS:Support a current transaction, execute non-transactionally if none exists.Analogous to EJB transaction attribute of the same name.(有则执行当前事务,无则不执行)

3MANDATORY:Support a current transaction, throw an exception if none exists.(有则执行当前事务,无则抛异常)

4REQUIRES_NEW:Create a new transaction, and suspend the current transaction if one exists.Analogous to the EJB transaction attribute of the same name.(存在事务则挂起当前事务,并且新建新事务)

5NOT_SUPPORTED:Execute non-transactionally, suspend the current transaction if one exists.

6NEVER:Execute non-transactionally, throw an exception if a transaction exists.Analogous to EJB transaction attribute of the same name.

7NESTED:Execute within a nested transaction if a current transaction exists,behave like REQUIRED otherwise. There is no analogous feature in EJB.

1》如果内部方法是支持当前事务的话,说明外部事务和内部事务是同一个,有异常外部事务和内部事务都会回滚;无异常则提交。

2》外部事务调用内部事务,而内部事务会新建一个事务并且将外部事务挂起的话:
2.1》如果内部新建事务中出现异常并且抛出给外部事务的话,外部事务捕获处理即外部事务未产生异常,则不影响外部事务,所以外部事务以及相关的内部事务不需要回滚;
2.2》如果内部新建事务中出现异常并且抛出给外部事务的话,外部事务没有捕获未处理即外部事务出现异常,则影响外部事务,外部事务以及相关的内部事务都会回滚;

3》外部事务调用内部事务,而内部事务会嵌套一个新的事务并且将外部事务挂起:
3.1》如果外部事务出现异常的话,则会影响内部事务,将内部事务回滚。
3.2》如果内部事务出现异常的话,外部事务捕获异常处理异常,则不影响外部事务;
3.3》如果内部事务出现异常的话,外部事务没有捕获异常即未处理异常,则影响外部事务;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值