其他分享
首页 > 其他分享> > 事务管理和Spring事务管理简介

事务管理和Spring事务管理简介

作者:互联网

文章目录



# 事务管理

事务简介

事务是由N步数据库操作序列组成的逻辑执行单元,这系列操作要么全执行,要么全放弃执行。

• 事务的特性(ACID)

事务的隔离性

常见的并发异常

常见的隔离级别 隔离级别从低到高

第一类丢失更新

比如事务2在T4时刻提交数据把N修改为9,然而在T6时刻事务1发生了回滚,把N的值修改为10;

事务1的回滚导致了事务2已经更新的数据丢失。

在这里插入图片描述

第二类丢失更新

比如事务2在T4时刻提交数据把N修改为9,然而在T6时刻事务1提交了事务,把N的值修改为11;

事务1的提交导致了事务2已经更新的数据丢失。

在这里插入图片描述

脏读

事务2在T3时刻读取到了事务1在T2时刻修改过的数据,此时N=11,然后事务1在T4时刻进行了回滚,修改N的值为10;

事务2读取到了事务1为提交的数据

在这里插入图片描述

不可重复读

事务2在T2时刻读取N为10,T4时刻事务1提交事务修改N为11,事务2在T5时刻再次读取N,此时值为11,两次读取的结果不一致;

在这里插入图片描述

幻读

事务2在T1时刻查询到3条数据,事务1在T3时刻提交事务导致食物2在T4时刻查询到4条数据,两次查询到的行数不一样

在这里插入图片描述

事务隔离级别

–级别从低到高

–性能从高到低

在这里插入图片描述

在这里插入图片描述

事务的传播机制

解决两个事务交叉在一起的时候以谁的事务为准的问题

–REQUIRED :支持当前事务(外部事务),比如A事务调用B事务,B事务以A事务的事务为标准,如果A不存在事务则创建一个新的事务;

–REQUIRED_NEW :创建一个新事务,按照B事务的标准执行,不管A是否有事务,如果有事务暂定当前事务(外部事务)即A事务;

–NESTED:如果当前存在事务(外部事务),则嵌套在该事务中执行,即如果A有事务,B事务有独立的提交和回滚,如果A没有事务则创建一个新的事务,和REQUIRED一样。

Spring事务管理

• 声明式事务 (常用注解)

- 通过XML配置,声明某方法的事务特征。

- 通过注解,声明某方法的事务特征。

在方法上添加注解,isolation设置隔离级别;propagation设置传播机制

 @Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)

• 编程式事务 (方法步骤较多,对中间特定步骤添加事务管理的时候常用)

- 通过 TransactionTemplate 管理事务,

并通过它执行数据库的操作

1、注入TransactionTemplate

2、设置隔离级别和传播机制

3、调用execute方法,传入回调接口

4、使用匿名内部类,实现 doInTransaction 方法里写业务逻辑

 @Autowired
    private TransactionTemplate transactionTemplate;


public Object save2() {
    transactionTemplate.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
    transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

    return transactionTemplate.execute(new TransactionCallback<Object>() {
        @Override
        public Object doInTransaction(TransactionStatus status) {

        }
    });
}

标签:事务管理,事务,隔离,简介,提交,Spring,时刻,读取
来源: https://blog.csdn.net/Qiuyuguohou/article/details/123189795