spring的事务

2018-07-20  本文已影响0人  Mei_Jiawei

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

说明: 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方法,事务会生效,出现异常,回滚。

后面会分析源码。

上一篇下一篇

猜你喜欢

热点阅读