您的位置:首页 > 编程语言 > Java开发

spring总结——事务管理

2018-02-22 10:16 330 查看

前言:

对于事务在之前事务这篇总结中有过介绍,这里就不详细说明,进行简单的回顾,然后结合spring来认识事务。

事务回顾:

一:什么是事务

事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。

二:事务特性

1)原子性 :强调事务的不可分。

2)一致性 :事务的执行的前后数据的完整性保持一致。

3)隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰。

4)持久性 :事务一旦结束,数据就持久到数据库。

三:不考虑隔离性引发的安全性问题

1)脏读:一个事务读到了另一个事务的未提交的数据

2)不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.

3)虚幻读:一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.

四:解决读问题:设置事务隔离级别

1)未提交读:脏读,不可重复读,虚读都有可能发生

2)已提交读:避免脏读。但是不可重复读和虚读有可能发生

3)可重复读:避免脏读和不可重复读.但是虚读有可能发生.

4)串行化的:避免以上所有读问题.

Mysql 默认:可重复读

Oracle 默认:读已提交

Spring进行事务管理一组API:

一:PlantformTransactionManager:平台事务管理器

1)org.springframework.jdbc.datasource.DataSourceTransactionManage使用 SpringJDBC 或 iBatis 进行持久化数据时使用

2)org.springframework.orm.hibernate3.HibernateTransactionManager使用Hibernate 版本进行持久化数据时使用

二: TransactionDefinition:事务定义信息

1)隔离级别

2)传播行为

3)超时信息

4)是否只读

传播行为:

PROPAGION_XXX:事务的传播行为

* 保证同一个事务中
PROPAGATION_REQUIRED:支持当前事务,如果不存在 就新建一个(默认)

PROPAGATION_SUPPORTS:支持当前事务,如果不存在,就不使用事务

PROPAGATION_MANDATORY:支持当前事务,如果不存在,抛出异常

* 保证没有在同一个事务中

PROPAGATION_REQUIRES_NE:如果有事务存在,挂起当前事务,创建一个新的事务

PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务

PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常

PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

三:TransactionStatus:事务的状态

记录事务的状态



平台事务管理根据事务定义的信息进行事务的管理,事务管理的过程中产生一些状态,将这些状态记录到TransactionStatus里面。

举例:

//设置事务的隔离级别是重复读;传播行为是默认的支持当前事务,如果不存在就新建一个;是否只读:false可操作
@Transactional(isolation.Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)


总结:

关于使用spring完成事务管理的学习先总结这么多,具体的应用还有待提高,总结有不合理的地方还望留言指出。大家共同进步和成长。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: