jee第5章 --- Spring的事务管理
目录
5.1 Spring事务管理概述
什么是Spring的事务管理
在实际开发中,操作数据库时都会涉及到事务管理问题
,为此Spring提供了专门用于事务处理的API。Spring的事务管理简化了传统的事务管理流程,减少了开发者的工作量
。
5.1.1 事务管理的核心接口(PlatformTransactionManager接口)
JAR包
- spring-tx-4.3.6.RELEASE(Spring提供的用于事务管理的依赖包)
JAR包下的org.springframework.transaction包的三个接口文件
- PlatformTransactionManager
- TransactionDefinition
- TransactionStatus
- 关于PlatformTransactionManager接口,Spring提供的平台事务管理器,它提供了操作事务的三个方法:
TransactionStatus getTransaction(TransactionDefinition definition) | 用于获取事务状态信息 |
void commit(TransactionStatus status) | 用于提交事务 |
void rollback(TransactionStatus status) | 用于回滚事务 |
- PlatformTransactionManager接口只是代表事务管理的接口,并不知底层是如何管理事务的,具体如何管理事务则由其实现类完成
常见的实现类 | 作业 |
---|---|
org.springframework.jdbc.datasource.DataSourceTransactionManager
|
用于配置JDBC数据源的事务管理器 |
org.springframework.orm.hibernate4.Hibernate TransactionManager |
用于配置Hibernate的事务管理器 |
org.springframework.transaction.jta.Jta TransactionManager |
用于配置全局事务管理器 |
- 关于TransactionDefinition接口,他是事务定义(描述)的对象,该对象中定义了事务规则,并提供了获取事务相关信息的方法:
获取事务相关信息的方法 | 描述 |
---|---|
String getName( ); | 获取事务对象名称 |
int getIsolationLevel( ); | 获取事务的隔离级别 |
int getPropagationBehavior( ); | 获取事务的传播行为 |
int getTimeout( ); | 获取事务的超时时间 |
boolean isReadOnly( ); | 获取事务是否只读 |
4.事务的传播行为:在同一个方法中,不同操作前后所使用的事务。它具体有:
在事务管理过程中,传播行为可以控制
,是否需要创建事务以及如何创建事务,通常情况下,数据的查询不会影响原数据的改变,所以不需要进行事务管理,而对于数据的插入、更新和删除操作,必须进行事务管理
。如果没有指定事务的传播行为,Spring默认传播行为是REQUIRED
。
5. TransactionStatus接口,是事务的状态,它描述了某一时间点上事务的状态信息。它含6个方法:
方法 | 描述 |
---|---|
void flush(); | 刷新事务 |
boolean hasSavepoint(); | 获取是否存在保存点 |
boolean isCompleted(); | 获取事务是否完成 |
boolean isNewTransaction(); | 获取是否为新事务 |
boolean isRollbackOnly(); | 获取事务是否回滚 |
void setRollbackOnly(); | 设置事务回滚 |
5.1.2 事务管理的方式
Spring事务管理的两种方式
Spring事务管理的方式 | 具体的方式描述 |
---|---|
编程式事务管理 |
通过编写代码实现的事务管理 ,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚 |
声明式事务管理 |
通过AOP技术实现的事务管理 ,主要思想是将事务作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”植入到业务目标类中 |
声明式事务管理最大优点
:开发者只需在配置文件中声明相关的事务规则,就可将事务应用到业务逻辑中。(推荐! )
5.2 声明式事务管理
如何实现Spring的声明式事务管理
两种实现方式:
基于XML的方式
基于Annotation的方式
。
5.2.1 基于XML方式的声明式事务
在配置文件中通过<tx:advice>
元素配置事务规则。当配置了事务的增强处理后,就可通过编写的AOP配置让Spring自动对目标生成代理。配置<tx:advice>元素的重点是配置<tx:method>子元素
,上图中使用灰色标注的是<tx:method>
元素中的常用属性。具体如下:
作项目的时候,在ch04项目基础上(有jdbc、tx、mysql驱程),再导入aop以及aspectjweaver两个包(不需要aspects包
)
5.2.2 基于Annotation方式的声明式事务
1.两步骤:
- 1.在Spring容器中注册事务注解驱动;
<tx:annotation-driven transaction-manager=“transactionManager”/>
- 2.在需要事务管理的类或方法上使用
@Transactional
注解。(添加@Transactional的位置即意味着这里要事务管理)- 加在Bean类上,则表示事务的设置对整个Bean类的所有方法都有效
- 加在Bean类中的某个方法上,则表示事务的设置只对该方法有效
2.使用@Transactional注解时,可以通过参数配置事务详情:
3.两种声明式事务的对比(导入的包相同)
- XML方式
- 注解方式
learning from my teacher’s ppt