SSM(Spring的事物管理)

5.1 Spring 事物管理概述

5.1.1 事物管理的核心接口

Spring事物管理所涉及的3个核心接口

PlatformTransactionManager

  • TransactionStatus getTransaction(TransactionDefinition definition) 用于获取事物状态信息。
  • void commit(TransactionStatus status) 用于提交事务
  • void rollback(TransactionStatus status)用于回滚事务
    TransactionStatus对象表示一个事务,它被关联在当前执行的线程上。

PlatformTransactionManager接口只是代表事务管理的接口,它并不知道底层是如何管理事务的,它只需要事务管理提供上面的3个方法,具体如何管理事务则由它的实现类来完成。

  • org.springframework.jdbc.datasource.DataSourceTransactionManager 用于配置JDBC数据源的事物管理器
  • org.springframework.orm.hibernate4.HibernateTransactionManager 用于配置Hibernate的事物管理器
  • org.springframework.transaction.jta.JtaTransactionManager 用于配置全局事物管理器

TransactionDefinition

事物定义的对象,该对象中定义了事务规则,并提供获取事物相关信息的方法。

  • String getName() — 获取事物对象名称
  • int getIsolationLevel() — 获取事物的隔离级别 ---- 事务的隔离级别详解
  • int getPropagationBehavior() — 获取事物的传播行为
  • int getTimeout() — 获取事物的超时时间
  • boolean isReadOnly() — 获取事物是否可读

事物的传播行为是指在同一个方法中,不同操作前后所使用的事务。

属性名称描述
PROPAGATION_ REQUIREDREQUIRED当前方法必须运行在一个事务环境中,如果已处于事务环境,直接使用,否则新开启一个事务
PROPAGATION_SUPPORTSSUPPORTS处于事务环境则使用当前事务,否则不使用事务
PROPAGATION_MANDATORYMANDATORY必须处于当前事务环境中,否则将抛出异常
PROPAGATION_REQUIRED_NEWREQUIRED_NEW必须在新事物中运行,如果处在事务中,暂停当前事务,在启动新的事物之后执行该方法,不在事务环境中,启动新的事务后执行方法
PROPAGATION_NOT_SUPPORTEDNOT_SUPPORTED总是以非事务状态执行
PROPAGATION_NEVERNEVER不支持事务,处于事务会抛异常
PROPAGATION_NESTEDNESTED总会启动新的事务,有可能事务嵌套

TransactionStatus

该接口提供事务状态API, 描述某一时间点上事务的状态信息。

  • void flush(); 刷新事务
  • boolean hasSavepoint(); 获取事物是否存在保存点
  • boolean isCompleted(); 获取事务是否完成
  • boolean isNewTransaction(); 获取是否是新事务
  • boolean isRollbackOnly(); 获取是否回滚
  • void setRollbackOnly(); 设置事务回滚

5.1.2 事务的管理方式

  • 传统的编程式事务管理
    通过编写代码实现的事物管理,包括定义事物的开始、正常执行后的事物提交和异常时的事物回滚。
  • 声明式事务管理
    通过AOP技术实现的事物管理,主要思想是将事务管理作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”代码织入到业务目标类中。

5.2 声明式事务管理

5.2.1 基于XML方式的声明式事务

基于XML方式的声明式事务管理通过在配置文件中配置事务规则的相关声明来实现。提供tx命名空间来配置事务,tx命名空间下提供了<tx:advice> 元素来配置事务的通知(增强处理)。当使用<tx:advice>配置事务的增强处理后,可以通过编写的AOP配置,让Spring自动对目标生成代理。

<tx:advice> //需要指定id 和transaction-manager(事务管理器)属性
<tx:advice>------<tx:attributes> //子元素可配置多个<tx:method>子元素配置执行事务的细节

attributes的子元素<tx:method>

属性名称描述
name指定了与事务属性相关的方法名,支持使用通配符 get*等
propagation指定事务的传播行为,默认为REQUIRED
isolation事务的隔离级别 DEFAULT、 READ_UNCOMMITTED、 READ_COMMITTED、 REPEATABLE_READ、 SERIALIZABLE 默认值是DEFAULT
read-only是否只读 默认false
timeout指定事务的超时时间
rollback-for指定触发事务回滚的异常类,指定多个异常类时,之间用逗号隔开
no-rollback-for指定不触发事务回滚的异常类

5.2.2 基于Annotation方式的声明式事务

  • Spring容器中注册事务注解驱动
<tx:annotation-driven transaction-manager="transactionManager"/>
  • 在类或方法上添加注解 @Transaction
    在类上,所有方法都起作用。
参数名称描述
value指定事务管理器
transationManager事务的限定符值,用于确定目标事务管理器,匹配特定的限定值(或者Bean的name值)默认为"" 别名为value
isolation隔离级别
noRollbackFor遇特定异常强制不会滚事务
noRollbackForClassName指定遇到多异常时强制不回滚事务
propagation指定事务的传播行为
read-only任务是否只读 默认false
rollbackFor指定异常强制回滚
rollbackForClassName可以指定多个异常回滚
timeout事务超时时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值