没有合适的资源?快使用搜索试试~ 我知道了~
02-01-10-Spring事务传播原理及数据库事务操作原理1
需积分: 0 0 下载量 65 浏览量
2022-08-04
16:32:26
上传
评论
收藏 1.04MB PDF 举报
温馨提示
试读
26页
介绍下,注解方式为例子配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional 标识。Spring 在启动的时候会去解析生成相关的 bean
资源详情
资源评论
资源推荐
咕泡出品,必属精品 www.gupaoedu.com
1
课程目标
1、掌握 Spring 事务传播原理。
2、掌握基于 Spring 的数据库事务操作原理。
3、初步了解分布式事务。
内容定位
1、适合有 Spring 开发经验并且希望深度掌握事务控制原理的人群。
2、通过本章内容的学习,能够掌握基于 Spring AOP 的事务设计原理。
从 Spring 事务配置说起
先看看 Spring 事务的基础配置
<aop:aspectj-autoproxy proxy-target-class="true"/>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 配置事务传播特性 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"
rollback-for="Exception,RuntimeException,SQLException"/>
<tx:method name="remove*" propagation="REQUIRED"
rollback-for="Exception,RuntimeException,SQLException"/>
<tx:method name="modify*" propagation="REQUIRED"
咕泡出品,必属精品 www.gupaoedu.com
2
rollback-for="Exception,RuntimeException,SQLException"/>
<tx:method name="login" propagation="NOT_SUPPORTED"/>
<tx:method name="query*" read-only="true"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(public * com.gupaoedu.vip..*.service..*Service.*(..))"
id="transactionPointcut"/>
<aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/>
</aop:config>
Spring 事务管理基于 AOP 来实现,主要是统一封装非功能性需求。
数据库事务原理详解
1、事务基本概念
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
特点:事务是恢复和并发控制的基本单位。事务应该具有 4 个属性:原子性、一致性、
隔离性、持久性。这四个属性通常称为 ACID 特性。
原子性(Automicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要
么都做,要么都不做。
一致性(Consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。
一致性与原子性是密切相关的。
隔离性(Isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及
使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
咕泡出品,必属精品 www.gupaoedu.com
3
持久性(Durability)。持久性也称永久性(Permanence),指一个事务一旦提交,它
对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何
影响。
2、事务的基本原理
Spring 事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,Spring 是无
法提供事务功能的。对于纯 JDBC 操作数据库,想要用到事务,可以按照以下步骤进行:
1、获取连接 Connection con = DriverManager.getConnection()
2、开启事务 con.setAutoCommit(true/false);
3、执行 CRUD
4、提交事务/回滚事务 con.commit() / con.rollback();
5、关闭连接 conn.close();
使用 Spring 的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由 Spirng 自
动完成。 那么 Spring 是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的
呢?解决这个问题,也就可以从整体上理解 Spring 的事务管理实现原理了。下面简单地
介绍下,注解方式为例子
配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional 标识。
Spring 在启动的时候会去解析生成相关的 bean,这时候会查看拥有相关注解的类和方
法,并且为这些类和方法生成代理,并根据@Transaction 的相关参数进行相关配置注入,
这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务)。
真正的数据库层的事务提交和回滚是通过 binlog 或者 redo log 实现的。
3、Spring 事务的传播属性
咕泡出品,必属精品 www.gupaoedu.com
4
所谓 spring 事务的传播属性,就是定义在存在多个事务同时存在的时候,spring 应该如
何处理这些事务的行为。这些属性在 TransactionDefinition 中定义,具体常量的解释见
下表:
常量名称
常量解释
PROPAGATION_REQUIRED
支持当前事务,如果当前没有事务,就新建
一个事务。这是最常见的选择,也是 Spring
默认的事务的传播。
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务
挂起。新建的事务将和被挂起的事务没有任
何关系,是两个独立的事务,外层事务失败
回滚之后,不能回滚内层事务执行的结果,
内层事务失败抛出异常,外层事务捕获,也
可以不处理回滚操作
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非
事务方式执行。
PROPAGATION_MANDATORY
支持当前事务,如果当前没有事务,就抛出
异常。
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事
务,就把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则
抛出异常。
PROPAGATION_NESTED
如果一个活动的事务存在,则运行在一个嵌
剩余25页未读,继续阅读
牛站长
- 粉丝: 22
- 资源: 299
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0