Spring 的事务
概况起来,事务对应的是 connection. 默认一个事务一个连接,当然 spring 的事务传播机制提供了更多的选择。
事务管理器
spring-tx 包下提供了事务管理的抽象,允许各个持久层框架来实现自己的 PlatformTransactionManager. 比如 DataSourceTransactionManager,JpaTransactionManager,HibernateTransactionManager 等
1 | public interface PlatformTransactionManager { |
事务就这三板斧,关于 7 中传播属性,网上有很多介绍,这里不再展开。
来测试下 spring-boot-starter-jdbc 提供的默认的 DataSource 以及 PlatformTransactionManager。
1 |
|
声明式事务
上一篇整理了 spring bean 的增强,其实声明式事务就是通过 aop 实现。 在方法上面添加 @Transactional 注解,并且在应用上添加 @EnableTransactionManagement。
通过 aop 创建带有事务拦截器(TransactionInterceptor)的代理对象
代理再通过事务拦截器配合对应的 platformTransactionManager,实现对事务方法的调用。
看下官方给的调用图。
事务调用流程说明:
- 调用 aop 代理对象
- 调用事务的切面方法,开启一个 transaction
- 调用自定义的切面的拦截方法(before/around)
- 调用目标业务逻辑的方法 (方法调用结束)
- 调用自定义的切面的拦截方法(after/around)
- 调用事务的切面方法,commit 或 rollback 一个 transaction.
- 返回到 aop 代理对象
Title: Spring 的事务
Author: mjd507
Date: 2019-07-14
Last Update: 2024-01-27
Blog Link: https://mjd507.github.io/2019/07/14/spring-transaction/
Copyright Declaration: This station is mainly used to sort out incomprehensible knowledge. I have not fully mastered most of the content. Please refer carefully.