SSM框架学习-Spring事务

news2024/9/28 11:13:21

1. 数据库中事务与Spring中的事务

数据库事务和Spring中的事务是两个不同的概念,但Spring中的事务是建立在数据库事务之上的。

  1. 数据库事务是指一组数据库操作,要么全部成功执行,要么全部回滚(撤销)。这么做是为了保证数据库的一致性和完整性。在数据库操作过程中,如果其中任意一步操作失败,整个事务将会被回滚到最初状态。

  2. Spring中的事务是指基于Spring框架提供的事务管理机制实现的一种服务,它可以对一组操作进行批量操作,保证这些操作要么全部成功,要么全部失败。Spring中的事务可以和数据库事务结合使用,通过管理数据库事务的提交和回滚来保证数据的一致性。

  3. 在Spring中,可以使用@Transactional注解来标注希望进行事务管理的方法或类。同时,Spring还提供了多种事务管理方式,如声明式事务、编程式事务等,可以根据具体的业务需求进行选择。

  4. Spring在数据层或业务层保障一系列的数据库操作同成功同失败,

2. Spring事务案例1(与之前的SQL案例类似)

在这里插入图片描述

该案例表明出现异常时,业务不会提交会进行回滚

2.1 使用注解标注

标注希望得到事务管理的方法或类
一般在接口方法处标注,不在实现类降低耦合

    @Transactional
    public void transfer(String out,String in ,Double money) ;

2.2 配置事务管理器

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }

2.3 在Spring文件中标注事务管理方式

注解式事务驱动

//开启注解式事务驱动
@EnableTransactionManagement

3. 事务角色

在这里插入图片描述

原本是三个事务,现在整合成为一个事务

在这里插入图片描述

4. 事务相关配置

在这里插入图片描述

如果在事务中抛出 RuntimeException 及其子类的异常,Spring会自动将其捕获并触发事务回滚。
当然,对于非RuntimeException 及其子类异常,如果它们没有被显式地指定为回滚异常,那么默认情况下 Spring 将不会触发事务回滚。
所以,我们要设置事务回滚异常。

    //rollback:设置当前事务参与回滚的异常,默认非运行时异常不参与回滚
    @Transactional(rollbackFor = IOException.class)
    public void transfer(String out,String in ,Double money) throws IOException;

5. Spring事务案例2-事务传播行为

在上述基础之上,对案例进行相应的改进

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

但是日志事务要和转账事务分离,所以针对日志功能要开启新事务;
事务传播行为:事务协调员对事务管理员所携带事务的处理态度,究竟是加入事务还是不加入事务;
所以日志功能要设置新事务属性

    //propagation设置事务属性:传播行为设置为当前操作需要新事务
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    void log(String out, String in, Double money);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Markdown】笔记

设置-通用-开启调试模式 普通文本编辑器编写的轻量级标记语言 标题 # ~ ###### 文本 _斜体_ *斜体* **粗体** ***粗斜体*** 列表 无序 * - 有序 1. 2. 3. Tab控制层级 链接 [链接名](链接地址) <链接地址> 引用 > 嵌套 > >> >>&…

hadoop零碎知识点总结

系列文章目录 ubuntu虚拟机下搭建zookeeper集群&#xff0c;安装jdk压缩包&#xff0c;搭建Hadoop集群与spark集群的搭建 虚拟机VMware里面安装Windows sever 2003版本详细教程_vmware安装win2003 centos7配置静态网络常见问题归纳_centos7网络问题 文章目录 系列文章目录…

chatgpt赋能Python-python3_排序

Python3 排序指南&#xff1a;介绍、说明和实践 Python3是当今最受欢迎的编程语言之一&#xff0c;拥有许多可用于各种任务的库和框架。其中之一是它自带的排序函数&#xff0c;在数据分析和机器学习等领域中非常有用。 在本篇文章中&#xff0c;我们将简要介绍Python3的排序和…

Baumer工业相机堡盟工业相机IO介绍与配置(二)

Baumer工业相机堡盟工业相机IO介绍与配置&#xff08;二&#xff09; Baumer工业相机Baumer工业相机IO的功能Baumer工业相机IO的作用Baumer工业相机IO上点连线方法 Baumer工业相机 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机&#xff0c;可用于各种应用场景&#…

Linux下基于TCP协议的Socket套接字编程(客户端服务端)入门详解

写在前面&#xff1a; 本篇博客探讨&实践环境如下&#xff1a; 1.操作系统&#xff1a; Linux 2.版本(可以通过命令 cat /etc/os-release 查看版本信息)&#xff1a;PRETTY_NAME“CentOS Linux 7 (Core)” 编程语言:C 一、socket 是什么&#xff1f; 常常说socket 、套接字…

chatgpt赋能Python-python3加密解密

Python3加密解密——确保你的数据安全 在今天的数字化时代&#xff0c;数据已经成为最重要的财产之一。然而&#xff0c;随着互联网的流行&#xff0c;数据泄露和非法访问变得越来越普遍。因此&#xff0c;确保数据的安全性变得非常重要。加密解密是目前最受欢迎的数据安全措施…

chatgpt赋能Python-python3_8如何下载

Python 3.8如何下载 Python 3.8是一种高级编程语言&#xff0c;具有简单易于学习和高度可读性的特点。这篇文章旨在为您提供Python 3.8的下载方法。 什么是Python 3.8 Python 3.8是Python编程语言的最新版本&#xff0c;于2019年10月发布。它引入了许多新特性和功能&#xf…

分布式消息中间件RocketMQ的安装与启动

RocketMQ 安装与启动 基本概念 消息(Message)&#xff1a;消息是指&#xff0c;消息系统所传输信息的物理载体&#xff0c;生产和消费数据的最小单位&#xff0c;每条消息必须属于一个主题。主体(Topic)&#xff1a; Topic表示一类消息的集合&#xff0c;每个主题包含若干条消…

免接管余压探测器的优势是什么?

余压传感器&#xff08;探测器&#xff09;是什么&#xff1f; 余压传感器&#xff08;探测器&#xff09;主要用于测量两个位置之间的压差。 余压传感器&#xff08;探测器&#xff09;的作用&#xff1f; 流量测量&#xff1a;在管道中&#xff0c;通过测量两点之间的压差&…

头歌计算机组成原理实验—运算器设计(5) 第5关:32位快速加法器设计

第5关&#xff1a;32位快速加法器设计 实验目的 帮助学生理解成组进位产生函数&#xff0c;成组进位传递函数的概念&#xff0c;熟悉 Logisim 平台子电路的概念&#xff0c;能利用前述实验封装好的4位先行进位子电路以及4位快速加法器子电路构建16位、32位、64位快速加法器&a…

Day42【动态规划】背包问题详解、416.分割等和子集

0-1背包问题详解&#xff1a;二维数组 文章讲解 视频讲解 0-1 背包问题&#xff1a;有 n 件物品和一个最多能背重量为 w 的背包。第 i 件物品的重量是 weight[i]&#xff0c;价值是 value[i]&#xff0c;每件物品只能用一次&#xff0c;求解将物品装入背包里物品价值总和最大…

深入理解 Go sync.Map

前言 Go 语言原生 map 并不是线程安全的&#xff0c;要对它进行并发读写操作时&#xff0c;一般有两种选择&#xff1a; 原生map搭配Mutex或RWMutex使用sync.Map 和原生map搭配Mutex或RWMutex相比&#xff0c;sync.Map在以下场景更有优势&#xff1a; 读多写少 修改&#x…

Golang 1.18 新特性模糊测试

一、Go 1.18新特性一览 0.官方博客&#xff1a;跳转 1.支持泛型 2.模糊测试 3.工作空间 4.性能提升 二、模糊测试介绍 模糊测试 &#xff08;fuzz testing, fuzzing&#xff09;是一种软件测试技术。其核心思想是將自动或半自动生成的随机数据输入到一个程序中&#xff0…

chatgpt赋能Python-python3怎么保存

Python 3如何高效地保存数据 Python是一门广泛使用的编程语言之一&#xff0c;其强大的工具和库使其成为从数据分析到机器学习等领域的首选语言。在处理大量数据时&#xff0c;数据的存储和访问变得非常关键。在这篇文章中&#xff0c;我们将讨论Python 3中如何保存数据以提高…

delphi6安装手册

DELPHI6安装手册 安装delphi6软件&#xff1a; 运行&#xff1a;\\dev2000 选择&#xff1a;set up→语言及开发工具→DELPHI6→双击图标install.exe 先后安装Delphi6和TeamSource 安装delphi6时会出现的要填序列号的情况 delphi6的安装序列号&#xff1a;在同一路径下双击ke…

chatgpt赋能Python-python3_9怎么调成黑色背景

Python是一种高级编程语言&#xff0c;它的版本不断发展和改进。最新发布的Python 3.9版本为用户提供了更多的新特性和改进&#xff0c;其中包括能够自定义代码编辑器背景颜色的新功能。本篇文章将介绍如何在Python 3.9中调整编辑器背景颜色为黑色&#xff0c;并探讨这个功能的…

三十九、分布式事务、seata、配置微服务客户端

1、事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作&#xff0c;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行、要么都不执行。 1.1 ACID事务的特点 原子性: 一致性&#xff1a;隔离性持久性 1.2 事务并发带来的问题 脏读 幻读 不可重复读 …

TCL字符串操作

format命令 因为 TCL 把所有的输入都当作字符串看待&#xff0c;所以 TCL 提供了较强的字符串操作功能&#xff0c;TCL 中与 字符串操作有关的命令有&#xff1a;string、format、regexp、regsub、scan 等。 语法&#xff1a;format formatstring ?vlue value...? format …

【Redis】电商项目秒杀问题之下单接口优化:Redis缓存、MQ以及lua脚本优化高并发背景下的秒杀下单问题

目录 一、优化思路 二、缓存库存与订单 1、库存缓存的redis数据结构 2、订单信息缓存的redis数据结构 三、整体流程 四、lua脚本确保权限校验操作的原子性 一、优化思路 【Redis】电商项目秒杀问题之超卖问题与一人一单问题_1373i的博客-CSDN博客https://blog.csdn.net/q…

chatgpt赋能Python-python3_打印

Python3 打印&#xff1a;一篇介绍性SEO文章 如果你是一名Python编程工程师&#xff0c;那么你一定知道在Python中打印是一项基本技能。在Python3中&#xff0c;打印已经发生了一些变化&#xff0c;本文将介绍Python3中打印的新特性和使用方法&#xff0c;并为您提供一些最佳实…