@Transactional注解解析

Transactional事务注解

需要在.application配置文件中配置才能开启注解模式

<!--定义@Transactionl注解的实现类可以不需要接口 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="logicDelete*" propagation="REQUIRED"/>
        <tx:method name="batchDelete*" propagation="REQUIRED"/>
        <tx:method name="batchLogicDelete*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

 

使用aop切面实现开启一个事务

rollbackFor = Exception.class   如果方法里出现Exception异常时,那么这个方法就会回滚,不过方法里的代码不能被try catch

包裹住,否则异常会被捕获,之后不会触发回滚事件

readOnly=true    开启只读事务。

readOnly=false  默认,开启读写事务。写数据的时候,假如某一行代码报错了,那么这个方法会被回滚,当作没发生过一样。

propagation = Propagation.REQUIRED  如果当前没有事务就会创建一个新的事务,有事务就不会创建新的事务,

假设:

public class xxx{
    //假设有两个方法a,b
    @Transactional(rollbackFor = Exception.class, readOnly=false, propagation = Propagation.REQUIRED)
    public void a() {
        b();
    }
    //如果b方法事务注解带有propagation = Propagation.REQUIRED属性的话,那么b方法的事务就是在a方法开始时就运行的,且b方法不会创建新的事务,如果出现异常,那么a和b方法会一起被回滚
    //到这一步:程序发现b方法的事务带有Transactional属性,就会去扫描现在是否还有事务在运行中,然后发现有a方法的事务还在运行就会直接使用a方法事务,并不会去创建新事务,而a方法事务带有出现异常就会回滚的属性,b方法出现异常会和a方法一起被回滚掉
    @Transactional(propagation = Propagation.REQUIRED)
    public void b() {
        throw new Exception();
    }
}

 

 

 

 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值