java自定义事务处理

按照以前的方式控制事务只需要在业务层方法上添加注解

@Transactional
就可以控制事务了,那么为什么这个注解会有这么强大的功能呢?处理流程大概是个什么样子的呢?怀着好奇的心理翻阅了许许多多的资料总结一下,有不对的希望大佬指出来

简单流程:

   1、拦截Transactional注解

   2、获取事务状态

   3、监听异常

    4、提交/回滚

ps:当然真正事务处理逻辑肯定没有这么简单

了解了基本流程之后我们试着写一个自己事务处理

1.我们试着写一个自己的注解

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyTransactional {

}

我这里设置的作用域是在方法上,可以自定义到类上或者其他上也可以加点儿属性

2.有了自定义注解之后我,我们现在该在aop上拦截这个注解了。

  /**
   * 获取事务源
   */
@Resource
private DataSourceTransactionManager dataSourceTransactionManager;

private TransactionStatus transactionStatus;

    /**
     * 对MyTransactional的方法环绕通知
     * @param joinPoint
     * @throws Throwable
     */
    @Around("@annotation(com.nhdc.logic.invest.front.comon.constant.MyTransactional)")
    public void doPoint(ProceedingJoinPoint joinPoint) throws Throwable {
        //获取事务状态
        transactionStatus = dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
        //继续执行方法
        joinPoint.proceed();
        //提交事务
         dataSourceTransactionManager.commit(transactionStatus);
    }
 /***
     * 当方法发生异常的时候触发 此时事务回滚
     */
    @AfterThrowing("@annotation(com.nhdc.logic.invest.front.comon.constant.MyTransactional)")
    public void rollback(){
        if(transactionStatus != null){
            transactionUtil.rollback(transactionStatus);
        }
    }

该AOP做了两件事情

 1、环绕通知添加了自定义注解的方法 收集事务 提交事务

2、监听添加了自定义注解方法 如果抛出异常则回滚

注意:如果方法里 try catch了异常 则监听异常失效

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值