美文网首页
spring的事务

spring的事务

作者: Mei_Jiawei | 来源:发表于2018-07-20 23:42 被阅读0次

    项目发布,用户反馈出现问题(有些数据会回滚,有些不会)。事务出现问题,记录一下。

    说明: Consumer类 有事务,但是捕获了异常。FirstService类,没有事务,调用SecondService类方法。SecondService类 ,该方法有事务 ,默认事务配置。RetryAspect类,该方法主要用于拦截加了@RetryService类的注解,然后对于抛出异常的方法保存到数据库进行重试机制。

    调用流程:Consumer类接收到请求,然后调用FirstService的methodFS方法,该方法会调用SecondService方法的methodSS方法,FS方法里面有@RetryAspect注解。

    spring是通过spring aop来实现声明式事务处理的,具体操作(比如事务实行的配置和读取,事务对象的抽象),用TransactionProxyFactoryBean接口来使用AOP功能,生成proxy代理对象,通过TransactionInterceptor完成对代理方法的拦截,将事务处理的功能编织到拦截的方法中。

    事务测试结果:

    1.有事务public方法出现异常会回滚;

    2.无事务public方法调用本类private方法事务失效,不会回滚;

    3.有事务public方法里面捕获了异常,调用另一个带有默认传播的事务的public方法,异常不会回滚;

    4.有事务public方法里面捕获了异常,并调用另一个默认传播的事务的public方法(有rollbackfor),嵌套事务都会回滚。会打印一个roll back的日志

    5.假设有A抽象类,类上面加了声明式事务,B实现了A。B里面的方法为protected方法,事务不会生效,出现异常,不会回滚。B里面的方法为public方法,事务会生效,出现异常,回滚。

    后面会分析源码。

    相关文章

      网友评论

          本文标题:spring的事务

          本文链接:https://www.haomeiwen.com/subject/wjjcmftx.html