当前位置: 首页 > news >正文

spring事务和数据库事务是怎么实现

Spring事务的原理

Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:

  1. 获取连接 Connection con = DriverManager.getConnection()
  2. 开启事务con.setAutoCommit(true/false);
  3. 执行CRUD
  4. 提交事务/回滚事务 con.commit() / con.rollback();
  5. 关闭连接 conn.close();
    使用Spring的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由Spirng 自动完成。

那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?

Spring中的事务是如何实现的?

  1. Spring事务底层是基于数据库事务和AOP机制的。

  2. 首先对于使用了@Transactional注解的Bean,Spring会创建一个代理对象作为Bean。

  3. 当调用代理对象的方法时, 会先判断该方法上是否加了@Transactional注解

  4. 如果加了,那么则利用事务管理器创建一个数据库连接

  5. 并且修改数据库连接的autocommit属性为false, 禁止此连接的自动提交, 这是实现Spring事务非常重要的一步。

  6. 然后执行当前方法,方法中会执行sql

  7. 执行完当前方法后,如果没有出现异常就直接提交事务。

  8. 如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务。

  9. Spring事务的隔离级别对应的就是数据库的隔离级别。

  10. Spring事务的传播机制是Spring事务自己实现的,也是Spring事务中最复杂的

  11. Spring事务的传播机制是基于数据库连接来做的,一个数据库连接一个事务, 如果传播机制配置为需要新开一个事务,那么实际上就是先建立一个数据库连接, 在此新数据库连接上执行sql

相关文章:

spring事务和数据库事务是怎么实现

Spring事务的原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con DriverManag…...

el-date-picker设置默认当前日期

HTMl部分&#xff1a; <el-form-item label"拍摄时间&#xff1a;"><el-date-pickerv-model"searchData.filmingTimeRange"type"daterange"align"right"unlink-panelsrange-separator"至"start-placeholder"…...

vue中使用this.$refs获取不到子组件的方法,属性方法都为undefined的解决方法

问题描述 vue2中refs获取不到子组件中的方法&#xff1f;&#xff0c;而获取到的是undefined 原因及解决方案&#xff1a; 第一种、在循环中注册了很多个ref 因为注册了多个ref&#xff0c;获取是不能单单知识refs.xxx&#xff0c;需要使用数组和索引来获取具体一个组件refs[…...

Linux命令200例:df用于显示文件系统的磁盘空间使用情况

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…...

Service not registered 异常导致手机重启分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Service not registered 异常导致手机重启二、Service not registered 解决方案 一、Service not registered 异常导致手机重启 1.重启 的部分Log如…...

深度解读|一站式ABI平台 Smartbi Insight V11 能力再升级

纵观过去&#xff0c;我们发现汽车和BI的发展有异曲同工之妙。 100来年&#xff0c;汽车的动力从蒸汽到燃油再到新能源&#xff0c;汽车的操控方式从手动到自动再到智能无人驾驶。而在BI领域&#xff0c;自1958年BI的概念提出后&#xff0c;底层数据准备从报表开发、Cube多维模…...

vConsole手机调试模式uniapp和原生h5

手机打开调试模式的方法 尽量放在页面头部&#xff0c;底部有可能不行 原生 <script src"https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script> <script>// init vConsolevar vConsole new VConsole();console.log(Hello world)…...

Flutter Dart语言(05)异步

0 说明 该系列教程主要是为有一定语言基础 C/C的程序员&#xff0c;快速学习一门新语言所采用的方法&#xff0c;属于在C/C基础上扩展新语言的模式。 1 async和await 在Dart语言中&#xff0c;虽然没有像其他语言&#xff08;如Java、C、Python&#xff09;中的传统多线程概…...

滇医通微信小程序分析笔记

注意 本文章仅供学习交流使用&#xff0c;如果你是铁粉你就会知道博主之前发布过一篇相关的文章&#xff0c;但是由于代码涉及到法律相关所以就隐藏了&#xff0c;两年的时间过去了&#xff0c;因为女朋友已经早早安排上了&#xff0c;所以就搁置了&#xff0c;本次不做代码分…...

IoTDB在springboot2中的(二) 查询

上一章我们处理的基本的构建接入&#xff0c;以及插入的处理&#xff0c;那么接下来我们进行查询的操作处理。 我们继续在IoTDBSessionConfig工具类中加入查询的方法处理 /*** description: 根据SQL查询最新一条数据* author:zgy* param sql sql查询语句&#xff0c;count查询…...

SpringBoot 底层机制分析【Tomcat 启动+Spring 容器初始化+Tomcat 如何关联Spring 容器】【下】

&#x1f600;前言 本篇博文是关于SpringBoot 底层机制分析实现&#xff0c;希望能够帮助你更好的了解SpringBoot &#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大…...

NLP(六十五)LangChain中的重连(retry)机制

关于LangChain入门&#xff0c;读者可参考文章NLP&#xff08;五十六&#xff09;LangChain入门 。   本文将会介绍LangChain中的重连机制&#xff0c;并尝试给出定制化重连方案。   本文以LangChain中的对话功能&#xff08;ChatOpenAI&#xff09;为例。 LangChain中的重…...

C字符串与C++ string 类:用法万字详解(上)

目录 引言 一、C语言字符串 1.1 创建 C 字符串 1.2 字符串长度 1.3 字符串拼接 1.4 比较字符串 1.5 复制字符串 二、C字符串string类 2.1 解释 2.2 string构造函数 2.2.1 string() 默认构造函数 2.2.2 string(const char* s) 从 C 风格字符串构造 2.2.3 string(co…...

async/await函数需要trycatch吗?

前言 写异步函数的时候&#xff0c;promise 和 async 两种方案都非常常见&#xff0c;甚至同一个项目里&#xff0c;不同的开发人员都使用不同的习惯, 不过关于两者的比较不是本文关注的重点&#xff0c;只总结为一句话&#xff1a;“async 是异步编程的终极解决方案”。 当使…...

Jenkins集成appium自动化测试(Windows篇)

一&#xff0c;引入问题 自动化测试脚本绝大部分用于回归测试&#xff0c;这就需要制定执行策略&#xff0c;如每天、代码更新后、项目上线前定时执行&#xff0c;才能达到最好的效果&#xff0c;这时就需要进行Jenkins集成。 不像web UI自动化测试可以使用无痕浏览器做到无界…...

MongoDB:切换log日志文件

可以不重启MongoDB&#xff0c;切换日志文件 use admin db.runCommand({logRotate:1})参考 MongoDB 日志切割三种方式...

代码随想录第三十五天

代码随想录第三十五天 Leetcode 860. 柠檬水找零Leetcode 406. 根据身高重建队列Leetcode 452. 用最少数量的箭引爆气球 Leetcode 860. 柠檬水找零 题目链接: 柠檬水找零 自己的思路:我的垃圾思路&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;复…...

块、行内块水平垂直居中

1.定位实现水平垂直居中 <div class"outer"><div class"test inner1">定位实现水平垂直居中</div></div><style>.outer {width: 300px;height: 300px;border: 1px solid gray;margin: 100px auto 0;position: relative;}.te…...

Mybatis引出的一系列问题-动态 SQL

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表最后一个列名的逗号。利用动态 SQL&#xff0c;可以彻底…...

Docker学习之构建Base Image

构建Base Image 目标是构建一个类似官方Hello world的镜像&#xff0c;需要配置好Docker运行环境。 创建目录&#xff0c;编写代码 创建并进入docker目录。 mkdir docker cd dockertouch hello.cvim hello.chello.c文件的内容如下&#xff1a; #include <stdio.h>in…...

实践证明:用需求四要素描述需求,AI编程返工率大幅下降

实践证明&#xff1a;用需求四要素描述需求&#xff0c;AI编程返工率大幅下降目标 边界 示例 验收 其中&#xff0c;边界 和 验收 最容易被低估&#xff0c;也最值得你花时间写清楚写在前面 你有没有遇到过这样的情况&#xff1a; 让 AI 写一个函数&#xff0c;结果它给你加…...

后端实战案例:企业级框架设计与优化实践

一、前言在 2026 年的软件开发中&#xff0c;Java 已经成为每一位工程师必须掌握的技能。无论是构建高性能后端服务、开发响应式前端界面&#xff0c;还是维护生产级服务器集群&#xff0c;这项技术都在其中扮演着关键角色。很多开发者在入门阶段会遇到一个普遍问题&#xff1a…...

Intv_AI_MK11大模型Python入门实战:零基础快速部署与调用指南

Intv_AI_MK11大模型Python入门实战&#xff1a;零基础快速部署与调用指南 1. 前言&#xff1a;为什么选择Intv_AI_MK11 如果你刚接触AI大模型开发&#xff0c;可能会被各种复杂的部署流程吓退。Intv_AI_MK11作为一款开源大模型&#xff0c;不仅性能出色&#xff0c;更重要的是…...

Unity中如何通过Shader与Bounds控制实现视锥体外物体渲染

1. 为什么需要控制视锥体外物体渲染 在Unity的默认渲染流程中&#xff0c;摄像机只会渲染位于视锥体&#xff08;Frustum&#xff09;范围内的物体&#xff0c;这个机制被称为视锥体剔除&#xff08;Frustum Culling&#xff09;。这个优化手段能显著提升渲染效率&#xff0c;避…...

别再让MCU直连MOSFET了!用N531搭建你的第一个栅极驱动电路(附PCB文件)

从零构建高效MOSFET驱动电路&#xff1a;N531实战指南 在嵌入式开发中&#xff0c;直接使用MCU的GPIO驱动功率MOSFET是一个常见但危险的做法。我曾亲眼见过一个智能家居项目因为这种设计导致整个控制板烧毁——MOSFET开关缓慢产生的高温不仅损坏了功率器件&#xff0c;还反向影…...

如何通过智慧树自动化学习助手解决网课学习效率问题

如何通过智慧树自动化学习助手解决网课学习效率问题 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 副标题&#xff1a;面向时间紧张学习者的智能网课辅助工具 一、价…...

OpenClaw配置文件详解:Qwen3.5-9B高级参数调优手册

OpenClaw配置文件详解&#xff1a;Qwen3.5-9B高级参数调优手册 1. 为什么需要手动调优OpenClaw配置 上周我尝试用OpenClaw自动处理一批技术文档的归档工作&#xff0c;发现同样的任务在不同时段完成速度差异巨大。有时30分钟就能搞定&#xff0c;有时却要卡顿近2小时。这促使…...

comsol复合相变墙体保温隔热,comsol论文复现建模仿真 模拟室外温度变化复合墙体温度变化过程

comsol复合相变墙体保温隔热&#xff0c;comsol论文复现建模仿真 模拟室外温度变化复合墙体温度变化过程&#xff0c;对比普通墙体的保温隔热性能大夏天顶着40度高温站阳台收衣服的时候&#xff0c;总想着要是墙体能像冰柜门一样隔热该多好。最近用COMSOL折腾了个复合相变墙体模…...

N16 LCD

一、LCD简介LCD 液晶显示屏。i.MX6ULL 里驱动它的模块叫&#xff1a;eLCDIF Enhanced LCD Interface&#xff08;增强型 LCD 接口&#xff0c;芯片内置的硬件控制器&#xff09;分辨率&#xff1a;1920 * 1080 1280*720色域&#xff1a;帧率/刷新率&#xff1a;LCD 扫…...

Win10主机与Win7虚拟机共享文件夹超详细指南(VMware/虚拟机新手必看)

Win10主机与Win7虚拟机无缝共享文件夹全流程解析 刚接触虚拟机的用户经常会遇到一个棘手问题&#xff1a;如何在主机和虚拟机之间高效传输文件&#xff1f;复制粘贴受限、U盘来回插拔效率低下&#xff0c;而共享文件夹功能正是解决这一痛点的最佳方案。本文将手把手带你完成从零…...