Spring 事务管理的实现分析
1、Spring 事务管理实现的基本模型
在同一个 connection 里,【开启事务】->【执行method】->【回滚 OR 提交】
2、注意点
- 线程安全,每个线程同一个数据源只有一个connection 。当线程在执行一个有事务的方法时,通过数据源去获取connection。
- 仅支持单个数据源的事务控制
- spring 抽象层 AbsPlatformTransactionManager,通过模板方法,由子类实现具体的【begin Transaction】【rollBack】【commit】, 由第三方实现,例如:DataSourceTransactionManager 、HibernateTransactionManager
- spring容器启动时,注入了数据源data source
- 最终实现的底层还是 java JDBC 的 connction 提供的方法实现,connection.createStatement(),cooncetion.commit(); connection.rollback().
3、设计类图之设计模式
- 常用的事务实现是 DataSourceTransactionManager.
4、spring 如何知晓 【method】 添加了事务?
- 添加事务的方式: 注解配置事务以及【事务属性,或事务定义】、xml 通过【pattern】模式匹配方式配置拦截点,同时配置了统一的需要的【事务属性】,这里暂不列举。例如:xml 配置事务驱动注解,在代码中使用注解 @Transactional
- 下图是【TransactionAspectSupport】 实现在事务中执行方法,也可能没有创建事务。
- getTransactionAttribute(Method method, Class<?> targetClass) 获取当前 method 的事务属性。
- 根据事务属性实现【三步走策略】