Spring - 事务管理(一)基本概念

事务的特性

原子性 
    不可分割
一致性 
    发生之前和之后事务总额不变
隔离性 
    不同时对同一事件进行事务处理
持久性 
    改变后保持不变


高层抽象接口

Spring事务管理高层抽象主要包括三个接口:
事务管理器:
    PlatformTransactionManager
事务定义信息(隔离、传播、超时、只读):
    TransactionDefinition
事务具体运行状态:
    TransactionStatus


接口实现

Spring为不同的持久性框架提供了不同的 PlatformTransactionManager 接口实现
SpringJDBC 或 iBatis 框架
    org.springframework.jdbc.datasource.DataSourceTransactionManager
hibernate
    org.springframework.orm.hibernate3.HibernateTransactionManager
    org.springframework.orm.hibernate4.HibernateTransactionManager
    org.springframework.orm.hibernate5.HibernateTransactionManager
JPA
    org.springframework.orm.jpa.JpaTransactionManager
JDO
    org.springframework.orm.jdo.JdoTransactionManager
JTA
    org.springframework.transaction.jta.JtaTransactionManager


隔离性

隔离性中的几个概念:
脏读
    一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的
不可重复读
   在同一个事务中,多次读取同一个数据返回的结果有所不同
幻读
    一个事务读取了几行记录后,另一个事务插入一些数据,幻读就发生了
    在后来的查询中,第一个事务就会发现有些原来没有的记录


隔离级别 isolation

事务的隔离级别(四种):
DEFAULT 
    使用后端数据库默认的隔离级别
    MySQL数据库,默认 REPEATABLE_READ
    Oracle数据库,默认 READ_COMMITTED
READ_UNCOMMITTED 
    可能导致 脏读、不可重复读、幻读
READ_COMMITTED 
    可防止脏读,但不可重复读、幻读仍可能发生
REPEATABLE_READ 
    可防止脏读和不可重复读,但是幻读仍可能发生
SEPIALIZABLE 
    完全服从ACID的隔离级别,确保不发生脏读、不可重复读、幻读。
    这在所有隔离级别中是最慢的,它是典型的通过完全锁定事务中涉及的数据表来完成的

传播行为 propagation

事务的传播行为:
解决业务层方法之间的相互调用的问题
PROPAGATION_REQUIRED
    支持当前事务,如果不存在就新建一个
PROPAGATION_SUPPORTS
    支持当前事务,如果不存在就不使用事务
PROPAGATION_MANDATORY
    支持当前事务,如果不存在抛出异常

PROPAGATION_REQUIRED_NEW
    如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED
    以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER
    以非事务方式运行,如果有事务存在,抛出异常

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

 

转载于:https://my.oschina.net/mengzhang6/blog/2208826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值