事物的传播

public class Spread {

@Transactional(rollbackFor=Exception.class)
public void entry(){
    doSomething();
}


@Transactional(rollbackFor=Exception.class)
public void doSomething(){

}
}

1 方法doSomething本身带事物,调用该doSomething的方法entry也是带着事物
这时候2个事物碰到一起了该怎么工作
2 这里所说的事物的传播都是指当前线程内,不跨线程,不涉及子线程的
事物传播的方式
发现事物的依据是当前线程内没有第二个事物
第一种:REQUIRED
如果当前存在事物,则加入该事物;如果当前没有事物,则创建一个新事物。这是默认值 就是说entry方法是先执行的,当entry方法已经开启了一个事物,调用doSomething方法时,doSomething方法的事物判断当前线程是否开启事物,如果开启了,就不再创建新事物直接加入到entry事物中,若doSomething的方法事物发现当前线程内没有事物,那么它自己就开启一个事物
第二种:REQUIRED_NEW
创建一个新事物,如果当前存在事物,则把当前的挂起entry开启自己的事物,调用到doSomething时挂起entry的事物,开启doSomething的事物
第三种:SUPPORTS
如果当前存在事物,则加入该事物,如果当前没有事物,则以非事物的方式运行
第四种:NOT_SUPPORTS
以非事物的方式运行,如果当前存在事物,则把当前事物挂起;其实就是不让按照事物方式运行,使用场景:完全不以事物方式运行的程序,暴力,慎用
第五种:NEVER
以非事物方式运行,如果当前存在事物抛出异常 也是不以事物方式运行
第六种:MANDATORY
如果当前存在事物则加入该事物,如果不存在则抛出异常,意思就是程序都要按照事物运行,安全级别比较高
第七种:NESTED
当前存在事物,则创建一个事物作为当前事物的嵌套事物运行,如果当前不存在事物则取值等价于第一个

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值