spring之事务管理1
2016-03-21 17:50
429 查看
spring事务的学习要从它主要的三个接口开始学习,明白spring事务的概念,理解spring能做什么,spring如何声明式事务和编程式事务如何配置,理解spring事务的优点,就能基本学的spring事务的知识,
spring的事务三大接口的内容: PlatformTransactionManager 、TransactionStatus 、TransactionDefinition
PlatformTransactionManager 源码 :这个接口像事务管理的平台,由它来获取事务,commit, rollback
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/27/e240a4a760d4fe049060a6e02b30085c)
TransactionStatus 源码:事务状态,可以看出这接口主要判断是否是新事务,是否有保存节点,是否只读,刷新事务状态,等
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/27/0aabb31224b7e9962385bbe4c78b644f)
TransactionDefinition 源码:主要是事务的隔离等级,传播图解, 超时,和只读判断的定义
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/27/7fcbbf66f4e2aa10f3958d1013ff7757)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/27/4c4c85b93a33d13f37d58b1ba34715a5)
所以,要想初认识spring的事务管理,spring大概能做的就是:
1、TransactionDefinition:
事务的隔离级别(Isolation)
事务的传播行为(Propagation Behavisor)
事务的超时时间(Timeout)
是否为只读事务(ReadOnly)
2、TransactionStatus
查询事务的状态
回滚设置
3、PlatformTransactionManager:
获取事务
提交
回滚
事务特性:
原子性:事务的操作不可分割
一致性:事务的逻辑要么一起成功,要么一起失败
隔离性:事务具有隔离等级,不同的事务有不同空间
持久性:事务保存数据库
数据并发会产生什么问题,如何解决:
丢失更新:A事务覆盖B事务这种
脏读:A事务读取到B事务未提交的数据
不可重复读:A事务读取B事务提交更改的数据
幻读:A事务读取B事务提交增加的数据
隔离等级:事务隔离等级和数据并发性对立,
ISOLATION_READ_UNCOMMITTED(未提交读):事务可以看到其他事务未提交的数据,所以任何错误都能发生
ISOLATION_READ_COMMITTED(提交读):(常用)事务只能看到提交过了的数据,可以避免丢失更新和脏读,
ISOLATION_REPEATABLE_READ(可重复度):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。
可以防止丢失更新,脏读,不可重复度。
ISOLATION_SERIALIZABLE(序列化):序列化,一个事务没做完,其他事务只能排队,全部错误都能防止
传播行为
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED:如果当前存在事务,则嵌套事务内执行,如果当前没有事务,则执行PROPAGATION_REQUIRED操作
spring的事务三大接口的内容: PlatformTransactionManager 、TransactionStatus 、TransactionDefinition
PlatformTransactionManager 源码 :这个接口像事务管理的平台,由它来获取事务,commit, rollback
TransactionStatus 源码:事务状态,可以看出这接口主要判断是否是新事务,是否有保存节点,是否只读,刷新事务状态,等
TransactionDefinition 源码:主要是事务的隔离等级,传播图解, 超时,和只读判断的定义
所以,要想初认识spring的事务管理,spring大概能做的就是:
1、TransactionDefinition:
事务的隔离级别(Isolation)
事务的传播行为(Propagation Behavisor)
事务的超时时间(Timeout)
是否为只读事务(ReadOnly)
2、TransactionStatus
查询事务的状态
回滚设置
3、PlatformTransactionManager:
获取事务
提交
回滚
事务特性:
原子性:事务的操作不可分割
一致性:事务的逻辑要么一起成功,要么一起失败
隔离性:事务具有隔离等级,不同的事务有不同空间
持久性:事务保存数据库
数据并发会产生什么问题,如何解决:
丢失更新:A事务覆盖B事务这种
脏读:A事务读取到B事务未提交的数据
不可重复读:A事务读取B事务提交更改的数据
幻读:A事务读取B事务提交增加的数据
隔离等级:事务隔离等级和数据并发性对立,
ISOLATION_READ_UNCOMMITTED(未提交读):事务可以看到其他事务未提交的数据,所以任何错误都能发生
ISOLATION_READ_COMMITTED(提交读):(常用)事务只能看到提交过了的数据,可以避免丢失更新和脏读,
ISOLATION_REPEATABLE_READ(可重复度):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。
可以防止丢失更新,脏读,不可重复度。
ISOLATION_SERIALIZABLE(序列化):序列化,一个事务没做完,其他事务只能排队,全部错误都能防止
传播行为
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED:如果当前存在事务,则嵌套事务内执行,如果当前没有事务,则执行PROPAGATION_REQUIRED操作
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- 肯特·贝克:改变人生的代码整理魔法
- 你应该学习哪种编程语言?
- 【DevOps】为什么我们永远疲于奔命?
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- [转]我们需要一种其他人能使用的编程语言
- DB2编程序技巧(1)
- DB2编程序技巧 (四)
- 女人VS编程_国庆快乐
- DB2编程序技巧 (六)
- DB2编程序技巧 (三)
- DB2编程序技巧 (九)
- DB2编程序技巧 (七)
- DB2编程序小小技巧
- DB2编程序技巧 (五)
- 网络管理之IP地址篇
- 文件的读出 编辑 管理