首页 > 其他分享 >事务

事务

时间:2024-10-20 18:21:54浏览次数:1  
标签:事务 READ springframework org import transactionManager

事务的基本概念

事务是由一系列操作组成的逻辑单元,这些操作要么全部成功,要么全部失败,一个事务具有以下特性(ACID):

  • 原子性 (Atomicity):事务中的所有操作要么全部完成,要么全部不完成。
  • 一致性 (Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。
  • 隔离性 (Isolation):并发执行的事务之间互不干扰。
  • 持久性 (Durability):一旦事务提交,对数据库的修改是永久性的。

spring 事务管理方式

  • 编程式事务管理:通过编写代码来管理事务,适合对事务控制要求较高的场景。
  • 声明式事务管理:通过配置文件或注解的方式来管理事务,更加简洁和易于维护。

使用编程式事务管理

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

public class MyService {
    private final PlatformTransactionManager transactionManager;

    public MyService(PlatformTransactionManager transactionManager) {
        this.transactionManager = transactionManager;
    }

    public void myTransactionalMethod() {
        DefaultTransactionDefinition def = new DefaultTransactionDefinition();
        def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            // 业务逻辑
            transactionManager.commit(status);
        } catch (Exception e) {
            transactionManager.rollback(status);
        }
    }
}

使用声明式事务管理

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {

    @Transactional
    public void myTransactionalMethod() {
        // 业务逻辑
    }
}

事务隔离级别

  • DEFAULT:使用数据库默认的隔离级别。
  • READ_UNCOMMITTED:读未提交
  • READ_COMMITTED:读已提交,ORACLE 默认
  • REPEATABLE_READ:可重复读(快照读),MYSQL 默认
  • SERIALIZABLE:串行化

隔离级别可能出现的问题:

隔离级别 描述 可能出现的问题
READ UNCOMMITTED 读未提交 脏读、不可重复读、幻读
READ COMMITTED 读已提交 不可重复读、幻读
REPEATABLE READ 可重复读(快照读) 幻读
SERIALIZABLE 串行化

并发场景的问题描述:

问题 描述
脏读 A 事务可以读取 B 事务未提交的数据,当 A 读完 B 回滚,A 读到了脏数据
不可重复读 A 事务查询某条数据后,B 事务修改了并提交,A 再次读取,发现两次读取不一致
幻读 A 事务查询一个范围数据,B 事务删除或增加这个范围的数据,A 再次读取,发现数据条数不一致

问题都是读相关,为什么写不会有问题?因为写本身就是独占锁,写不会出问题

事务传播行为

  • REQUIRED:支持当前事务,如果没有事务则新建一个事务(默认行为)
  • SUPPORTS:支持当前事务,如果没有事务当前操作以无事务性执行
  • MANDATORY:支持当前事务,如果不存在则抛出异常
  • REQUIRES_NEW:总是新建一个事务
  • NESTED:如果当前存在事务,则在嵌套事务中执行。如果没有就新建一个事务
  • NOT_SUPPORTES:非事务执行,如果存在事务,暂停事务(保证自己不以事务执行)
  • NEVER:非事务执行,如果存在事务,抛出异常

标签:事务,READ,springframework,org,import,transactionManager
From: https://www.cnblogs.com/cyrushuang/p/18487599

相关文章

  • USB协议详解第17讲(USB事务总结)
    1.USB传输回顾前面讲了四种传输的类型的事务组成,包括控制传输,同步传输,批量传输,中断传输。2.USB事务总结本节我们来对事务(transaction)相关内容做以总结,从前面学习中我们可以看到其实事务有三种类型,Setup事务、DataIN事务、DataOUT事务。Setup事务:主要向设备发送控制命令;Dat......
  • USB协议详解第15讲(USB传输-批量传输及事务组成)
    1.前言前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,上一节我们讲了同步传输细节及事务组成,今天我们主要讲解批量传输及事务组成,批量传输也叫大容量传输。批量传输和同步传输类似,是使用批量事务(BulkTrans......
  • USB协议详解第16讲(USB传输-中断传输及事务组成)
    1.前言中断传输用于那些频率不高,但是对周期有一定要求的数据传输。具有保证的带宽,并能在下一个周期对先前错误的传输进行重传。中断端点在端点描述符中要报告主机对此端点的查询时间,主机会保证在小于这个时间间隔的范围内安排一次传输,比如HOST主机1ms内向鼠标设备请求一次数据。......
  • USB协议详解第13讲(USB传输-控制传输及事务组成)
    1.前言前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,今天我们主要讲解控制传输三个阶段及事务组成。控制传输是一种特殊的传输方式,且传输过程相对复杂一些,但十分重要。当USB设备初次连接主机时,用控制传输......
  • USB协议详解第14讲(USB传输-同步传输及事务组成)
    1.前言前面讲过USB一个传输由多个事务组成,一个事务由多个包实体组成。传输又分为控制传输、同步传输、批量传输、中断传输四种,上一节我们讲了控制传输细节及事务组成,今天我们主要讲解同步传输及事务组成。同步传输用在数据量大、对实时性要求高的场合,例如音频设备、视频设备等,这......
  • 2024/10/18日 日志 --》关于MySQL中的 事务 以及JDBC的初步学习笔记与整理
    今天学习练习了事务的相关内容,并正式向连接数据库走近,进入到JDBC的学习。点击查看代码--事务--概念简介:是一种机制,一个操作序列,包含了一组数据库操作命令。-- 事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,--即这一组数据库命令要么同时成功,要么同时失......
  • 如何理解分布式事务
    在分布式系统环境中,分布式事务是一个关键的技术挑战。那么,什么是分布式事务呢?让我们一起来深入理解。一、分布式事务的定义分布式事务是指在分布式系统中,为了保证数据的一致性,涉及多个节点的事务操作。在传统的单体应用中,事务通常由数据库管理系统来处理,保证了数据的一致......
  • Spring中的事务提交事件
    如果想在spring操作事务结束后执行一些代码,应该怎么办?为什么要这样?比如我们在事务中给其他系统发了消息,期望事务提交后过一会收到这个系统的回应,然后操作刚刚提交的数据。但是如果回应来的太快就像龙卷风,我们的事务是托管给Spring的可能还没提交,也就没法操作了一个方案是使用......
  • Mongodb 性能监控工具FreeMonitoring,mongostat,mongotop,Profiler,索引,分片,事务超时,Mongo
    db.users.createIndex({username:'hashed'})1#创建唯一索引db.values.createIndex({title:1},{unique:true})2#复合索引支持唯一性约束db.values.createIndex({title:1,type:1},{unique:true})3#多键索引支持唯一性约束db.inventory.createIndex({ratings:1},{uni......
  • 一文彻底弄懂mysql的事务日志,undo log 和 redo log
    在数据库事务管理中,UndoLog和RedoLog是两种关键日志,用于保障事务的原子性和持久性。它们的作用是确保数据库在出现崩溃、断电、宕机等故障时,能够进行恢复操作,从而保障数据一致性和完整性。它们通常用于支持事务的ACID特性中的原子性和持久性。下面将分别介绍UndoLo......