spring 事务

事务属性

             事务属性有五个方面:传播行为,隔离级别,超时时间,回滚规则,是否只读。 

事务注解方式       

     @Transactional  
     1.标记类时,类里面所有方法的都进行事务处理,
     2.标记接口,只有在接口代理才会生效,
     3.必须配置public上,其它虽然不会报错但不会生效

传播行为

 

    @Transactional(propagation= Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行旧的事务
     @Transactional(propagation= Propagation.REQUIRED):如果存在事务, 那么加入事务, 没有的话新建一个(默认情况下)        @Transactional(propagation=Propagation.NOT_SUPPORTED) :不开启事务          
     @Transactional(propagation=Propagation.MANDATORY) :必须在已有事务活动中执行,否则抛出异常      
     @Transactional(propagation=Propagation.SUPPORTS) :支持当前事务,如果没有当前事务,就以非事务方式执行     @Transactional(propagation= Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行旧的事务
     @Transactional(propagation=Propagation.NEVER) :必须在没有事务活动中执行,否则抛出异常(与Propagation.MANDATORY相反)

隔离级别       

     @Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据(脏读,不可重复读,幻读
     @Transactional(isolation = Isolation.READ_COMMITTED):读取已提交数据(不可重复读,幻读
     @Transactional(isolation = Isolation.REPEATABLE_READ):可重复读(幻读
     @Transactional(isolation = Isolation.SERIALIZABLE):序列化
  注:
  脏读 : 一个事务读取到另一事务未提交的数据
  不可重复读 : 在同一事务中, 同一数据多次读取返回的结果不同,读取最新数据(修改
  幻读 : 一个事务读到另一个事务已提交的新增或者删除数据

事务超时时间

@Transactional(timeout = 数字)默认单位秒

回滚规则

@Transactional(rollbackFor=Exception.class),@Transactional(rollbackFor={Exception.class,ArithmeticException.class}) 抛出指定异常数组类进行回滚
@Transactional(rollbackForClassName="Exception"),@Transactional(rollbackForClassName={"Exception","ArithmeticException"})抛出指定异常数组类名进行回滚
@Transactional(noRollbackFor=Exception.class)抛出指定异常数组中的类时,不进行事务回滚
@Transactional(noRollbackForClassName="Exception")抛出指定异常数组类名异常时,不进行事务回滚

是否只读

@Transactional(readOnly=true)只读,默认false

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值