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

spring之事务管理1

2016-03-21 17:50 429 查看
spring事务的学习要从它主要的三个接口开始学习,明白spring事务的概念,理解spring能做什么,spring如何声明式事务和编程式事务如何配置,理解spring事务的优点,就能基本学的spring事务的知识,

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操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring 管理 编程 事务