spring的事务管理
一、事务管理的核心接口
1、PlatformTransactionManager接口
是spring提供的平台事务管理器,主要是用于管理事务的,提供了三个常用的操作事务的方法
(1)TransactionStatus getTransaction(TransactionDefinition d):用于获取事务状态信息的
(2)void commit(TransactionStatus t):用于提交事务
(3)void rollback(TransactionStatus t):用于提交回滚
注意:不同的持久层技术,实现不同的实现类
2、TransactionStatus 接口是事务的状态,描述某一个时间点上的事务状态信息,常用的六个方法
(1)void flush():刷新事务
(2) boolean hasSavepoint():获取是否存在保存点
(3)boolean is Completes():获取事务是否完成
(4)boolean isNewTransaction():获取是否是新事务
(5) boolean isRollbackOnly():获取是否回滚
(6)boolean setRollbackOnly():设置事务回滚
3、TransactionDefinition 接口是事务定义的对象,定义了事务规则,该对象中有获取事务相关信息的方法
(1)String getName():获取事务对象名称
(2) int getIsolationLevel():获取事务的隔离级别
(3)int getPropagationBehavior():获取事务的传播行为
(4) int getTimeout():获取事务的超时时间
(5) boolean isReadOnly():获取事务是否只读
二、事务管理方式
1、编程式事务管理:通过编写代码实现事务管理,包括定义事务的开始,正常执行后的事务提交和异常时的事务回滚
2、声明式事务管理:利用AOP技术实现事务管理。通过AOP技术把事务管理作为一个切面织入到切点中。
优点:开发者不需要通过编程的方式来管理事务,只需要在配置文件中进行事务规则的相关声明,就可以将事务规则应用到业务逻辑中。
三、声明式事务管理
有两种方式:第一,基于xml方式的声明式事务。第二,基于注解方式的声明式事务
(1) 基于xml方式的声明式事务
是通过配置文件进行事务规则的相关声明老实现的
tx:advice
属性:id:唯一标识。
transaction-manager:事务管理器
子元素:tx:attributes:设置事务的属性
子元素:tx:method:
属性:(1) name:指定与事务属性相关的方法
(2) propagation:指定事务的传播行为,默认值为required
(3)islation:指定的事务隔离级别,默认值为default
(4)read-only:指定事务是否只读,默认值为false
(5)timeout:指定事务超时的时间,默认值为-1,永不超时
(6)rollback-for:指定触发事务回滚的异常类,指定多个异常类时,用逗号分开。
(7)no-rollback-for:指定不触发事务回滚的异常类,指定多个异常类时,用逗号分开。
(2)基于注解方式的声明式事务
步骤:a.在spring容器中注册事务注解驱动:<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
b.在bean类上或者Bean类的方法上使用@Transactional
参数:(1)value:指定事务管理器
(2)transactionManager:指定事务的限定符值,用于确定目标事务管理器,匹配特定的限定值。默认为"",其别名为value
(3)islation:指定事务的隔离级别
(4)noRollbackFor:指定遇到特定异常时强制不回滚事务
(5)noRollbackForClassName: 指定遇到特定多个异常时强制不回滚事务,属性值可以指定多个异常类名
(6)propagation:指定事务的传播行为
(7)read-only:指定事务是否只读,
(8)RollbackFor:指定遇到特定异常时强制回滚事务
(9)RollbackForClassName: 指定遇到特定多个异常时强制回滚事务,属性值可以指定多个异常类名
(10)指定事务的超时时长