spring事务介绍

spring事务介绍

1.什么是事务:
事务是指逻辑上的一组操作 这个操作要么全部成功要么全部失败.
如银行转账 张三转给李四1000元 那么张三账户扣1000 李四加1000
如果张三钱扣了 但是李四要加失败 那么 就必须全部失败 要么全部成功
要么全部失败
2.事务有哪些特性:
原子性:是指一个不可分割的操作 事务中的操作要么都发生要么都不发生
隔离性:多个用户并发事务的时候不应该互相干扰
一致性:一次事务执行后前后数据的完整性必须保持一致
持久性:一个事务一旦被提交那么对数据库的影响将是永久性的

Spring事务管理接口:
PlatformTransactionManager:
事务管理器 包括事务提交回滚
TransactionDefinition:
事务定义信息类包涵事务隔离级别
传播 超时 是否只读
TransactionStatus:
事务的具体运行的状态类

PlatformTransactionManager接口实现类

datasourecTransaction: 使用JDBC或者mybatis的时候使用的事务管理类

HibernateTransactionManager:使用hibiernate的时候使用的事务管理类
JpaTransactionManager:使用JPA进行持久化的时候使用的事务管理类

JdoTransactionManager:当使用JDO的时候使用的事务管理类
JtaTransactionManager 使用一个JTA实现管理事务 在一个事务跨越多个资源的时候使用

TransactionDefinition设置隔离级别
隔离级解决 脏读 幻读 不可重复读
脏读:一个事务对去了另一个事务改写但是还未提交的数据 如果这些数据没有回滚 那么读到的数据是无效的。

不可重复读:在同一个事务中多次读取同一数据返回的结果不一致。

幻读:一个事务读取了几行记录后 另一个事务插入了一些记录 幻读就发生了 在后来的查询中 第一个事务查询的就没有记录

事务的隔离级别

DEFAULT :使用数据库默认的事务隔离级别
READ_UNCOMMITEN:允许你读取还未提交的改变了的数据可能导致 脏 幻 不可重复读问题
READ_COMMITTED 允许在并发事务已经提交后读书可以防止脏读 但是幻读和不可重复读不能防止

REPEATABLE_READ:对相同的字段的多次读取时一致的除非数据被事务本身改变 可以防止脏读不可重复读但是不能防止幻读

SERIALIZABLE 完全服从ACID的隔离级别 确保不发生脏读 幻读 不可重读读 这在所有的隔离级别中是最慢的 它是典型的通过完全锁定在事务中涉及到的数据来完成的

mysql默认隔离级别是:REPEATABLE_REA
oralce:默认隔离级别是 READ_COMMITTED

事务的传播行为:
什么是事务的传播行为?
PROPAGATION_REQUIRED:支持当前事务,如果不存在就新建一个事务
比如: A方法调用B方法 如果 A方法有事务那么就会把
B方法放到A方法的事务中执行 如果A方法没有事务
那么B方法就会新建一个事务 他们是在同一个事务中执行

PROPAGATION_SUPPORTS :支持当前事务如果不存在就不使用事务
比如: A方法调用B方法 如果A方法有事务那么B方法就使用A方法事务 如果A方法没有事务的话 那么B方法就不使用事务 意思A方法的执行和B方法的执行都是没有事务的.

PROPAGATION_MANDATORY:支持当前事务 如果不存在就抛出异常
比如:如果方法A调用方法B 方法A有事务那么 B方法就在A方法的事务中一起提交 如果A方法没有事务那么抛出一个异常

前面3个为一类:都是方法A调用其他方法的时候
第一个是加入事务 要么创建 第二是如果A方法没有事务则不使用事务
第三个如果A方法没有使用 那么直接抛出异常

PROPAGATION_REQUIRES_NEW:如果有事务存在,挂起当前事务 创建一个新事务
比如:A方法调用B方法 如果A方法存在事务那么 挂起A方法的时候新建一个事务给B方法使用 方法A和方法B不是在同一个事务中执行的

PROPAGATION_NOT_SUPPORTED:以非事务方式运行如果有事务挂起当前事务
比如:如果方法A有事务那么就挂起A事务 将B方法以非事务方法执行

PROPAGATION_NEVER :以非事务方式运行 如果有事务存在 抛出异常
比如:总是以非事务方式执行的 如果方法A有事务调用方法B 方法B是使用这个做为传播状态的 那么就会抛出异常

PROPAGATION_NESTED :如果当前有事务存在 则 嵌套事务执行
比如:PROPAGATION_NESTED 将创建一个依赖于外层事务的子事务,当外层事务提交或回滚时,子事务也会连带提交和回滚。嵌套事务不能够提交,它必须通过外层事务来完成提交的动作,外层事务的回滚也会造成内部事务的回滚,如果子事务执行失败那么就会回滚到 执行完外部事务的一个保存点上。

Transactionstatus接口

copy to clipboardprint?
package org.springframework.transaction;  

public interface TransactionStatus extends SavepointManager {  

    boolean isNewTransaction();  

    boolean hasSavepoint();  

    void setRollbackOnly();  

    boolean isRollbackOnly();  

    boolean isCompleted();  
}  

用于对事务进行操作的一组API
Spring支持两种 方式事务管理
一.编程式的事务管理
在实际应用中很少使用
通过TransactionTemplate手动管理事务
二 使用xml配置声明方式事务
开发中推荐使用(代码侵入性小)
Spring的声明式事务是通过AOP实现的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值