事务及SpringBoot中的事务开启

目录

1.什么是事务?

2.事务的四大特性?

3.SpringBoot中怎样开启事务

   1.开启事务支持 

    2.在需要开启事务的方法或类上使用@Transactional

      3.通过配置类来开启全局事务


1.什么是事务?

事务是指在数据库管理系统中执行的一系列操作的逻辑单元。事务可以由一个或多个数据库操作(例如插入、更新、删除等)组成,这些操作被视为一个不可分割的工作单元。在事务中,要么所有的操作都成功执行,要么所有的操作都不执行,不会出现部分操作成功而部分操作失败的情况。

事务注解属性:

  1. 传播行为(Propagation):指定事务的传播行为,即定义了事务方法调用之间的关系。常见的传播行为包括:

    • REQUIRED:如果当前存在事务,则加入该事务;如果不存在事务,则创建一个新事务。
    • REQUIRES_NEW:无论当前是否存在事务,都创建一个新事务,并暂停当前事务(如果存在)。
    • SUPPORTS:如果当前存在事务,则加入该事务;如果不存在事务,则以非事务方式执行。
    • NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起该事务。
  2. 隔离级别(Isolation Level):指定事务的隔离级别,即定义了事务之间的可见性和并发控制的程度。常见的隔离级别包括:

    • READ_UNCOMMITTED:允许读取未提交的数据,可能导致脏读、不可重复读和幻读问题。
    • READ_COMMITTED:只能读取已提交的数据,避免了脏读问题,但可能导致不可重复读和幻读问题。
    • REPEATABLE_READ:在同一个事务中多次读取数据时,保证数据的一致性,避免了脏读和不可重复读问题,但可能导致幻读问题。
    • SERIALIZABLE:最高级别的隔离级别,完全隔离事务,避免了脏读、不可重复读和幻读问题。
  3. 回滚规则(Rollback Rules):指定事务在遇到特定异常时是否回滚。可以定义多个回滚规则,每个规则可以配置一个或多个异常类型。如果事务抛出了与回滚规则匹配的异常,事务将回滚。

  4. 超时时间(Timeout):指定事务的最大执行时间。如果事务执行时间超过指定的超时时间,事务将被强制回滚。

2.事务的四大特性?

通常被称为ACID特性

  1. 原子性(Atomicity):事务被视为一个不可分割的操作单元,要么全部执行成功,要么全部不执行。如果任何一部分操作失败,整个事务将被回滚到最初状态,所有的修改都会被撤销。

  2. 一致性(Consistency):事务执行前后,数据库的状态必须保持一致。这意味着事务的操作必须满足数据库的约束和规则,以确保数据的完整性和有效性。

  3. 隔离性(Isolation):在并发环境下,多个事务可能同时执行。隔离性指的是每个事务的操作应该与其他事务相互隔离,使得每个事务都感觉不到其他事务的存在,避免了并发执行可能导致的数据不一致问题。

  4. 持久性(Durability):一旦事务提交成功,其所做的修改将永久保存在数据库中,即使在系统发生故障或重启之后也不会丢失。

事务的特点: 通过使用事务,可以保证数据库的数据一致性和完整性,同时提供并发控制和故障恢复的机制,确保数据库系统的可靠性和可用性。

3.SpringBoot中怎样开启事务

   1.开启事务支持 

在启动类中使用@EnableTransactionManagement开启事务支持

package com.cssl;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;@SpringBootApplication
@EnableTransactionManagement//开启事务支持
@MapperScan("com.cssl.mapper")
public class HospitalHouApplication {public static void main(String[] args) {SpringApplication.run (HospitalHouApplication.class, args);}}

    2.在需要开启事务的方法或类上使用@Transactional

              事务中的注解属性:

  1. propagation:指定事务的传播行为。可以设置为 Propagation.REQUIREDPropagation.REQUIRES_NEWPropagation.SUPPORTSPropagation.NOT_SUPPORTED 等。

  2. isolation:指定事务的隔离级别。可以设置为 Isolation.DEFAULTIsolation.READ_UNCOMMITTEDIsolation.READ_COMMITTEDIsolation.REPEATABLE_READIsolation.SERIALIZABLE 等。

  3. readOnly:指定事务是否为只读事务。如果设置为 true,则事务只能读取数据,不能修改数据。这可以用于提高性能。

  4. timeout:指定事务的超时时间,单位为秒。如果事务执行时间超过指定的超时时间,事务将被回滚。

  5. rollbackFor 和 noRollbackFor:指定事务回滚的异常类型。rollbackFor 属性用于指定需要回滚的异常类型,noRollbackFor 属性用于指定不需要回滚的异常类型。

  6. rollbackForClassName 和 noRollbackForClassName:与上述属性类似,但可以通过异常类名的字符串形式指定异常类型。

      3.通过配置类来开启全局事务

        优点: 

  • 集中配置事务管理器
  • 灵活的事务配置选项
  • 多数据源支持
  • 代码整洁性和可维护性
  • 与其他配置的集成

        创建一个AopConfig的事务配置类

@Aspect
@Configuration
public class AopConfig {private final static int TX_METHOD_TIME_OUT = 10;private static final String POITCUT_EXPRESSION = "execution(* com.test.sketelon.service.*.*(..))";@Autowiredprivate PlatformTransactionManager platformTransactionManager;@Beanpublic TransactionInterceptor txadvice() {NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource ();Map<String, TransactionAttribute> nameMap = new HashMap<> (16);RuleBasedTransactionAttribute readOnlyRule = new RuleBasedTransactionAttribute ();readOnlyRule.setReadOnly (true);readOnlyRule.setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUIRED);RuleBasedTransactionAttribute requireRule = new RuleBasedTransactionAttribute ();requireRule.setRollbackRules (Collections.singletonList (new RollbackRuleAttribute (Exception.class)));requireRule.setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUIRED);requireRule.setTimeout (TX_METHOD_TIME_OUT);nameMap.put ("add*", requireRule);nameMap.put ("save*", requireRule);nameMap.put ("insert*", requireRule);nameMap.put ("update*", requireRule);nameMap.put ("delete*", requireRule);nameMap.put ("remove*", requireRule);nameMap.put ("batch*", requireRule);nameMap.put ("get*", readOnlyRule);nameMap.put ("query*", readOnlyRule);nameMap.put ("find*", readOnlyRule);nameMap.put ("select*", readOnlyRule);nameMap.put ("count*", readOnlyRule);source.setNameMap (nameMap);return new TransactionInterceptor (platformTransactionManager, source);}@Beanpublic Advisor txAdviceAdvisor() {AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut ();pointcut.setExpression (POITCUT_EXPRESSION);return new DefaultPointcutAdvisor (pointcut, txadvice ());}
}

到这就完成了!!!

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

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

相关文章

基于SpringBoot+vue+elementui在线教育系统详细设计实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相…

外包干了7个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入北京某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

智慧旅游+数字化景区整体解决方案:文件全文83页,附下载

关键词&#xff1a;智慧景区建设&#xff0c;智慧旅游一体化平台&#xff0c;数字化景区建设&#xff0c;智慧旅游建设&#xff0c;智慧景区解决方案&#xff0c;智慧文旅解决方案&#xff0c;智慧旅游解决方案 一、景区智慧旅游建设需求与背景分析 1、技术发展背景 随着信息…

Unity | Shader基础知识(第十集:shader常用外部资产单词速成)

目录 一、外部资产简介 二、常用的外部资产单词 三、常用的外部资产单词和引入内部 四、图片资产外部调整的具体讲解 1.Tiling&#xff0c;中文&#xff1a;铺地砖 2.Offset&#xff0c;中文&#xff1a;偏移 五、作者的话 一、外部资产简介 在第六集中&#xff0c;我们…

RabbitMQ的常见工作模式

Work queues 工作队列模式 模式说明 通过Helloworld工程我们已经能够构建一个简单的消息队列的基本项目&#xff0c;项目中存在几个角色:生产 者、消费者、队列&#xff0c;而对于我们真实的开发中 &#xff0c;对于消息的消费者通过是有多个的。 比如在实现用户注册功能时&…

【OpenCV】绘制桌面锁屏时钟

OpenCV 是一个开源的计算机视觉&#xff08;Computer Vision&#xff09;与机器学习软件库&#xff0c;提供了多种图像处理算法与接口&#xff0c;用于解决计算机视觉相关问题。OpenCV 支持多平台与多语言&#xff0c;本文主要记录如何使用 OpenCV-Python 绘制桌面锁屏时钟。 目…

一、环境配置

一、下载Ubuntu18.04版本镜像 我的电脑配置比较低(08年奥运限定版哦)&#xff0c;使用的是虚拟机VMware进行安装Ubuntu18.04版&#xff0c;跟书上使用的一样 Ubuntu 18.04镜像 别下载错了哈 二、VMware下安装Ubuntu18.04操作系统 之前写过相关的博文&#xff0c;详细配置可…

软件测试——性能测试

目录 一、性能测试简介 二、性能测试指标 三、性能测试的流程 四、Jmeter简介 五、Jmeter常见测试框架 六、Jmeter录制脚本 七、脚本增强 八、Jmeter脚本参数化 九、断言 十、关联 十一、JDBC请求 十二、分布式测试 十三、性能测试报告 一、性能测试简介…

API接口技术开发拼多多接口链接采集实时销量、SKU信息、券后价格、优惠券信息API接入步骤及演示示例

要实现拼多多接口链接采集实时销量、SKU信息、券后价格、优惠券信息API接入步骤及演示示例&#xff0c;首先需要了解拼多多开放平台的相关API接口。以下是一个简单的Java示例&#xff0c;使用requests库调用拼多多开放平台的API接口&#xff1a; 注册并登录开放平台&#xff0c…

【LeetCode】一周中的第几天+ 一年中的第几天

2023-12-30 文章目录 一周中的第几天方法一&#xff1a;模拟思路步骤 方法二&#xff1a;调用库函数方法三&#xff1a;调用库函数 [1154. 一年中的第几天](https://leetcode.cn/problems/day-of-the-year/)方法一&#xff1a;直接计算思路&#xff1a; 方法二&#xff1a;调用…

react Hook useEffect的基本使用及注解

一、概述 useEffect是React提供的一个Hook&#xff0c;用于在函数组件中执行副作用操作。副作用操作通常包括数据获取、订阅事件、手动操作DOM等。useEffect可以让我们在函数组件中模拟类组件的生命周期方法&#xff08;如componentDidMount、componentDidUpdate、componentWi…

vue3+ts实现图片预览功能

首先&#xff0c;需要创建一个Vue组件&#xff0c;用于显示图片和预览图。 <template><div><img :src"imageSrc" mouseover"showPreview" mouseout"hidePreview" /><div v-if"previewVisible" class"previ…

【计算机考研】学硕还是专硕?

这里面没有什么更好的选择&#xff0c;大家都知道专硕录取人数多&#xff0c;学硕录取人数上&#xff0c;博弈一直存在 单就考研的难度上来说&#xff0c;专硕的难度确实要比学说低很多的&#xff0c;同样的专业课的情况下&#xff0c;专硕的考研数学考的是数学二和英语二&…

rk3568 gamc0 控制器寄存器配置不了导致连接不上phy

系统启动 GMAC 的驱动开机 log 上出现打印&#xff1a;No PHY found 或者 Cannot attach to PHY。查阅rk 官方gmac 配置指导手册出现改问题的原因可能如下&#xff1a; 但反复检查硬件和软件发现都没问题。看内核启动日志发现gamc0 在启动过程中读取gmac0 的版本id是读取不到&a…

P2440 木材加工

题目背景 要保护环境 题目描述 木材厂有 &#xfffd;n 根原木&#xff0c;现在想把这些木头切割成 &#xfffd;k 段长度均为 &#xfffd;l 的小段木头&#xff08;木头有可能有剩余&#xff09;。 当然&#xff0c;我们希望得到的小段木头越长越好&#xff0c;请求出 &a…

表格自定义音频播放组件

1.在使用的地方调用 <Audiosvue ref"audio" class"audio-box" :audioFile"item.cont"></Audiosvue> 2.引入组件 import Audiosvue from "/components/audio"; 3.组件 <template><div><div style"d…

优化Vue项目中 WebStorm:2023.3 对 CSS 和 HTML 的默认注释

前言 WebStorm是一种基于JetBrains IntelliJ平台的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于Web开发。它支持JavaScript、HTML和CSS等语言&#xff0c;并提供了丰富的功能和工具&#xff0c;以提高开发人员的效率。但是&#xff0c;在开发Vue项目中发现&a…

(科目三)计算机操作系统

1、操作系统的基本概念及功能 1.1概念 一、操作系统的概念 操作系统是运行在裸机之上的&#xff0c;控制和管理计算机硬件和软件资源、合理组织计算机工作流程一级方便用户操作的程序集合。 操作系统由一套分层次的控制程序组成&#xff0c;是计算机硬件的一级扩充是软件系…

【爬虫逆向实战 逆向滑块 Python+Node】今天逆向的网站有点嘿嘿,还是仅供学习,别瞎搞

逆向日期&#xff1a;2024.03.01 使用工具&#xff1a;Node.js、Python 加密方法&#xff1a;AES标准算法 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算…

Java底层自学大纲_互联网安全设计篇

互联网安全设计专题_自学大纲所属类别学习主题建议课时&#xff08;h&#xff09; A 互联网安全架构平台设计001 如何防御XSS攻击与防止抓包篡改数据2.5 A 互联网安全架构平台设计002 spring security实现动态权限控制2.5 A 互联网安全架构平台设计003 spring security整合j…