spring事务--一点小计

1. 使用事务管理器时,什么条件下开始事务?事务是什么时候开始?以及什么时候提交事务?

某个方法required,而当时没有启动事务,这时候创建一个新事务。 
某个方法require new。马上就会创建一个新事务(嵌套?)。 
当创建事务的方法正常退出后,会提交对应的事务 

引用
2. 若某方法定了事务,但开始时候执行了一大堆不包含任何数据库操作的处理,此时会开始时候吗?

会 

引用
3. 方法定义为:PROPAGATION_NOT_SUPPORTED或者PROPAGATION_SUPPORTS似乎都是一样的,即不要求一定在事务中执行,在当前存在事务的时候就按事务方式执行,否则以非事务方式执行。

不一样 
PROPAGATION_NOT_SUPPORTED 
          Execute non-transactionally, suspending the current transaction if one exists. 
PROPAGATION_SUPPORTS 
          Support a current transaction, execute non-transactionally if none exists. 
也就是说当not supported时,如果在事务环境中运行会暂停当前事务。如果此时该方法抛出异常事务不会回滚。 
当support时上述情况相反,会回滚事务。 
当方法正常退出或者不存在事务时两者行为一致。 


引用
4. PROPAGATION_REQUIRED以及PROPAGATION_REQUIRES_NEW说的似乎也是一样,即要求事务中执行,若不存在事务,则新建事务,否则在已有事务中执行。

不一样。如果在已有事务下运行,则required不会新建事务;而requires_new铁定会再新建一个,暂停原先事务。 
也就是说,如果某个方法只是REQUIRED,那么抛出异常后,会回滚原先的操作。如果某个方法requries_new,而又抛出异常,只会回滚这个方法中的操作,不涉及原先操作。 
(猜测:如果jdbc驱动支持嵌套事务,那么requries_new可能是用嵌套事务来作的。) 

如果不存在现有事务则两者行为一致 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值