【spring】事务管理之初识

23 篇文章 0 订阅

  

       数据并发会出现什么问题?脏读、不可重复读、幻想读等。为了解决这个问题。我们可以用事务,用于确保数据的完整性和一致性。


事务的4个特点;

1 原子性  确定动作要不全部执行,要不都不执行

2 一致性  当事务完成的时候,必须确保数据是一致性的,不能部分完成部分失败

3 隔离性   每一个事务和事务之间是隔离的

4 持久性   一旦事务完成,无论发生了什么,结果都不会在收到影响了


数据库的锁机制:

表锁定:对整张表进行锁定

行锁定:对表中的特定行进行锁定

共享锁定:会防止独占锁定,胆允许其他的共享锁定

独占锁定:防止其他的独占锁定,也防止其他的共享锁定

为了更改数据,数据库必须在进行更改的行上施加行独占锁定,insert/update/delete和select for update语句都采用必要的行锁定。


spring的核心接口:



spring并不直接管理事务,而是提供了很多的事务管理器,他们讲事务管理职责委托给你hibernate、mybatis/jdbc/jta等。


        在PlatformTransactionManager接口中,一共有3个方法,分别是

TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;

         void commit(TransactionStatus status) throws TransactionException;

void rollback(TransactionStatus status) throws TransactionException;

        spring事务管理的优点就是为不同的事务API提供一致的编程模型,不同的平台框架实现了不同的事务管理机制。

上面的接口的执行过程很简单,通过getTransaction可以得到具体的各个平台的事务,然后就开始执行commit或者是rollback。

                                                                                                                                                                                TransactionDefinition用于描述事务的隔离级别,超时时间、是否只读事务和事务传播规则等控制事务具体行为的事务属性,这些事务属性通知xml配置或者注解扫描提供,也可以通过手工编程的方式设置。


我们来细细的说一下TransactionDefinition接口的具体定义:


                1、 int getPropagationBehavior(); 表示事务的传播行为


表示的是当事务方法被另一个事务方法调用的时候,必须指定事务应用如何传播。例如:方法可能继续在现有的事务中运行,也可能开启一个新的事务。并在自己的事务中运行。


Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,他们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播的。


比如当我们调用spring的service接口方法,如果:UserService addUser方法的时候,他将运行与Spring管理的事务环境中,Service接口方法可能会在内部调用其他的Service接口方法以共同完成一个完整的业务操作,因此就会产生服务接口方法嵌套调用的情况,spring通过事务传播行为控制当前的事务如何传播到被嵌套调用的目标服务接口方法中。


2、int getIsolationLevel();  事务隔离级别


                         


3、设置超时时间:int getTimeout();

4、设置是否可读:boolean isReadOnly();


我们来说一下TransactionStatus接口里面的方法.


1、boolean isNewTransaction();是否是新的事务

2、boolean hasSavepoint();  是否有恢复点

3、void setRollbackOnly(); 是否设置为可读

4、boolean isRollbackOnly(); 是否为只回滚

5、boolean isCompleted(); 是否已经完成


         我们首先对事务有一个了解,接下来我们来学习spring中的2中事务。









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值