Spring Boot 事务详解

2023-11-08

【自己学习事务做的笔记,方便记忆和复习】

1、事务是为了解决数据安全问题而存在的。

最经典的例子就是银行转账问题,A账户给B账户转账100元,A账户扣除100元后由于不可抗力因素导致程序中断,B账户没有收到那100元,A账户那100元凭空消失,肯定是不行的。A扣款和B收款操作要么同时成功,要么同时失败,这个时候就需要引入事务操作。

2、事务的四个特性:

  • **原子性:**一个事务是一个不可分割的工作单位。
  • **一致性:**事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的。
  • **隔离性:**一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • **持久性:**一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

3、事务管理方式

spring支持编程式事务管理声明式事务管理两种方式。

编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于**@Transactional注解**的方式),便可以将事务规则应用到业务逻辑中。

@Transactional注解:

它是声明式事务管理编程中使用的注解,放在接口实现类或接口实现方法上,并且只对public方法才起作用。只读的接口不需要事务管理,防止影响系统性能。

@Transactional 实质是使用了 JDBC 的事务来进行事务控制的,实现原理:

  1. 事务开始时,通过AOP机制,生成一个代理connection对象,并将其放入 DataSource 实例的某个与 DataSourceTransactionManager 相关的某处容器中。在接下来的整个事务中,客户代码都应该使

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 事务详解 的相关文章

随机推荐

  • 华为OD机试真题- 组合出合法最小数【2023Q1】【JAVA、Python、C++】

    题目描述 给一个数组 数组里面都是代表非负整数的字符串 将数组里所有的数值排列组合拼接起来组成一个数字 输出拼接成的最小的数字 输入描述 一个数组 数组不为空 数组里面都是代表非负整数的字符串 可以是0开头 例如 13 045 09 56
  • 哇塞,可以用Python实现电脑自动写小说了!!!

    作家 是多么一个让人感到向往的职业 我也幻想着 有一天能够靠写小说赚稿费 来实现自己的另一份可靠的收入 可惜 理想是美好的 但现实很残酷 不管怎么写 都不能赶上其他作者 自己至今仍然是一个扑街写手 我自知我的水平是真的不能冠以作家的称号 因
  • 【简单工具】BurpSuite截获请求并生成文件

    目录 1 实验目标 2 实验环境及靶机设置 2 1 实验环境 2 2 靶机设置 3 实验过程 3 1 前期准备 3 2 BurpSuite设置与操作 3 3 查看结果 4 总结 1 实验目标 设置BurpSuite为浏览器代理 拦截浏览器的
  • Django-登录demo

    本demo的登陆逻辑 如果账号密码正确 跳转至百度页面 账号密码错误 提示登录失败 正确的 账号 admin 密码 123 1 views下添加一个login方法 2 urls中去绑定一下 3 创建一个login xml 运行一下
  • AD18导入的3D模型颜色是白色解决

    问题描述 从Solidworks导入AD18的step文件 显示为白色 解决方法 Solidworks中保存step文件时选AP214格式 不要选择AP203 建议 重新导出时建议起一个和上一次不一样的名字 不然重新导入AD依然是白色 效果
  • Unity自带IAP插件使用

    Unity Services里的Unity IAP对于IOS和GooglePlay的支付用这个插件就足够了 Unity官方文档 1 集成插件 Window Services Ctrl 0 在Services面板Link你的工程 启用In A
  • 抽象问题方法论

    文章目录 模型简化 问题分解到base 流式处理 只关心当前节点问题 从设计者角度出发 思考问题 前后逻辑串联 穷举 细节是魔鬼 基础无穷尽 更高的秩序意味着更先进的文明 设计要小而美 而不是大而全 升维 降维 基于以上逻辑 需要做熵减行为
  • uniapp小程序

    uniapp小程序 uni app之响应式单位upx和rpx upx rpx简介 upx 1 动态绑定的 style 不支持直接使用 upx 2 使用 uni upx2px Number 转换为 px 后再赋值 rpx responsive
  • 华为OD机试 - N进制减法(Java)

    题目描述 主管期望你实现一个基于字符串的N进制的减法 需要对输入的两个字符串按照给定的N进制进行减法操作 输出正负符号和表示结果的字符串 输入描述 输入有三个参数 第一个参数是整数形式的进制N值 N值范围为大于等于2 小于等于35 第二个参
  • 【视频篇】创作的基石,如何找素材?

    前言 工作学习中免不了要搜集素材 然后进行二次创作 这些素材从哪来呢 别告诉我你还在直接百度之后慢慢翻 针对如何找素材 我在打算做一个专题分享一下我的 路子 常见的素材类型比如图片 视频 字体 海报模板 PPT模板等等 想到什么写什么吧 这
  • 一个人如何做抖音矩阵

    随着抖音发展的越来越成熟 不少企业 公司都开始在抖音上发力 但由于人员不够迟迟没有开始布局抖音矩阵 今天小编就来和大家聊一聊一个人怎么做抖音矩阵 一个人做抖音矩阵其实也非常简单 只需要借助矩阵管理系统即可 很多小伙伴迟迟没有做抖音矩阵营销的
  • python 字符串截取_python字符串截取、查找、分割

    Python 截取字符串使用 变量 头下标 尾下标 就可以截取相应的字符串 其中下标是从0开始算起 可以是正数或负数 下标可以为空表示取到头或尾 例1 字符串截取 str 12345678 print str 0 1 gt gt 1 输出s
  • QT 控件重绘

    前言 转载请附上连接 本帖原创请勿照抄 QT重绘控件是指通过实现控件头文件 使用QSS或者样式表来对某个控件进行重新绘制 1 重绘QButton按钮 2 重绘QComboBox下拉框 3 其它控件重绘的办法 1 重绘QButton 重绘控件
  • 竞赛选题 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

    文章目录 0 简介 1 二维码检测 2 算法实现流程 3 特征提取 4 特征分类 5 后处理 6 代码实现 5 最后 0 简介 优质竞赛项目系列 今天要分享的是 基于机器学习的二维码识别检测 opencv 二维码 识别检测 机器视觉 该项目
  • 深度学习手记(七)之MNIST实现CNN模型

    手写字体识别是一个很好练习CNN框架搭建的数据集 下面简单讲述一下整个模型构建的思路 整个模型通过两次卷积 两次亚采样以及两次全连接层 整个结构比较简单 也易理解 其中 两次卷积层的大小都为5x5 过滤器分别为32和64个 为了不改变图片的
  • 【Docker】Docker 如何在容器内安装vi命令(vi不能使用)

    文章目录 1 背景 1 背景 mac下安装了docker 然后用docker 安装了grafana软件 然后进入grafana base lcc lcc prometheus docker exec it 4b5f517f4340 bash
  • 火车进站

    import java util 火车进站 1 先求出所有可能的出栈序列 不一定合法 2 判断出栈序列是否合法 3 对合法的出栈序列进行排序后输出 public class solution private static List
  • 密码学哈希函数

    哈希函数H使用变长数据分组M作为输入 生成定长结果h H M 这一结果也称哈希值 哈希码或散列值 好的哈希函数的特点如下 对大输入集合使用该函数时 输出是均匀分布的且是明显随机的 概括的说 哈希函数的主要目标是保证数据的完整性 在安全应用中
  • Visual Studio 2019 Community 版离线注册

    本文主要参考 https blog csdn net songfuliang2011 article details 102486451 Visual Studio 2019 Community 虽然是免费使用 但必须在线注册一个账号 否则
  • Spring Boot 事务详解

    自己学习事务做的笔记 方便记忆和复习 1 事务是为了解决数据安全问题而存在的 最经典的例子就是银行转账问题 A账户给B账户转账100元 A账户扣除100元后由于不可抗力因素导致程序中断 B账户没有收到那100元 A账户那100元凭空消失 肯