Spring的事务步骤

一、事务处理方案:

Spring框架中提供的事务处理方案:一共有两种: 

1.适合中小项目使用的, 注解方案:

        注解的方式做事务用起来简单,灵活,方便,中小型项目中用它比较方便,因为只需要@Transactional注解就OK了;这种方式用的就是spring框架自己提供的事务的处理机制,@Transactional注解的机制是AOP的环绕通知:在方法执行之前开启事务,方法执行之后回滚或者提交事务。@Transactional注解常见的属性包括:隔离级别、传播行为、超时时间以及回滚规则

2.使用 AspectJ 的 AOP 配置管理事务(掌握)

        在大型项目中如何做事务的:

        实现步骤: 都是在xml配置文件中实现。使用 XML 配置文件配置事务代理的方式的不足是,每个目标类都需要配置事务代理。当目标类较多,配置文件会变得非常臃肿。

        使用 XML 配置文件的方式可以自动为每个符合切入点表达式的类和方法生成事务代理,使用aspectj框架功能,在spring配置文件中声明类和方法需要的事务。这种方式的业务方法和事务配置完全分离的,业务代码就是业务代码,事务就是事务。 

二、总体思路: 

  1)你需要指定要使用的事务管理器实现类,使用<bean>

  2)需要指定哪些类,哪些方法需要加入事务的功能

  3)需要指定方法需要的隔离级别,传播行为,超时

<dependency> 
<groupId>junit</groupId> 
<artifactId>junit</artifactId> 
<version>4.11</version> 
<scope>test</scope> 
</dependency> 

<dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-context</artifactId> 
<version>5.2.5.RELEASE</version> 
</dependency> 

<dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-aspects</artifactId> 
<version>5.2.5.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId> 
<artifactId>spring-tx</artifactId> 
<version>5.2.5.RELEASE</version> 
</dependency> 

<dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-jdbc</artifactId> 
<version>5.2.5.RELEASE</version> 
</dependency> 

<dependency> 
<groupId>org.mybatis</groupId> 
<artifactId>mybatis</artifactId> 
<version>3.5.1</version> 
</dependency> 

<dependency> 
<groupId>org.mybatis</groupId> 
<artifactId>mybatis-spring</artifactId> 
<version>1.3.1</version> 
</dependency> 

<dependency> 
<groupId>mysql</groupId> 
<artifactId>mysql-connector-java</artifactId> 
<version>5.1.9</version> 
</dependency> 

<dependency> 
<groupId>com.alibaba</groupId> 
<artifactId>druid</artifactId> 
<version>1.1.12</version> 
</dependency> 

插件 
<build> 
<resources> 
<resource> 
<directory>src/main/java</directory><!--所在的目录--> 
<includes><!--包括目录下的.properties,.xml 文件都会扫描到--> 
<include>**/*.properties</include> 
<include>**/*.xml</include> 
</includes> 
<filtering>false</filtering> 
</resource> 
</resources> <plugins> 
<plugin> 
<artifactId>maven-compiler-plugin</artifactId> 
<version>3.1</version> 
<configuration> 
<source>1.8</source> 
<target>1.8</target> 
</configuration> 
</plugin> 
</plugins> 
</build> 

spring框架中提供的事务处理方案:一共有两种: 

  1. 适合中小项目使用的, 注解方案:

        spring框架自己用aop实现给业务方法增加事务的功能, 使用@Transactional注解增加事务,@Transactional注解的机制是AOP的环绕通知:在方法执行之前开启事务,方法执行之后回滚或者提交事务:

  1.  @Transactional注解是spring框架自己的注解,放在public方法的上面,表示当前方法具有事务。可以给注解的属性赋值,表示具体的隔离级别,传播行为,超时时间,异常信息等等
  2.   @Transactional 若用在方法上,只能用于 public 方法上。对于其他非 public 方法,如果加上了注解@Transactional,虽然 Spring 不会报错,但不会将指定事务织入到该 方法中。因为 Spring 会忽略掉所有非 public 方法上的@Transaction 注解。
  3.   若@Transaction 注解在类上,则表示该类上所有的方法均将在执行时织入事务。

三、使用@Transactional的步骤:

  1.声明事务管理器对象

    在applicationContext.xml文件中声明事务管理器对象:

    <bean id="xx" class="DataSourceTransactionManager">  

  (因为你是用的事务管理器的mybatis实现类)

事务管理器提交事务,回滚事务,但是它必须得知道连接哪一个数据库,数据库的信息 :

  2.开启事务注解驱动:

         告诉spring框架,我要使用注解的方式管理事务。

3.在业务方法上面加入@Trancational

 rollbackFor:表示发生指定的异常时一定回滚

  1. Spring框架首先会检查方法抛出的异常是不是在rollbackFor的属性值中,如果异常在rollbackFor列表中,不管是什么类型的异常,一定会回滚;
  2. 如果你抛出的异常不在rollbackFor列表中,Spring会判断异常是不是RuntimeException,如果是一定回滚
  3. 总结:抛出指定异常或者是运行时异常都会回滚  

四、使用 AspectJ 的 AOP 配置管理事务

1.加入aspectj 的依赖坐标:

  1)要使用的是aspectj框架,在pom.xml文件中需要加入aspectj 的依赖坐标

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-aspects</artifactId>

<version>5.2.5.RELEASE</version>

</dependency>
2.声明事务管理器对象:

    在applicationContext.xml文件中声明事务管理器对象:

    <bean id="xx" class="DataSourceTransactionManager">  

  (因为你是用的事务管理器的mybatis实现类)

 3.配置业务方法的事务属性
  1. 声明方法需要的事务类型(配置方法的事务属性【隔离级别,传播行为,超时】)
        为事务通知设置相关属性。用于指定要将事务以什么方式织入给哪些方法。例如,应用到 buy 方法上的事务要求是必须的,且当 buy 方法发生异常后要回滚业务。

        你可以使用通配符,但是方法的命名需要有一定的规范,所有添加都是add开头  所有修改都是modify开头 所有删除都是remove开头...

4.配置切入点表达式:

        指定哪些类需要用到事务:

5.配置增强器:

         写的这些类得和那些需要用到事务的方法关联上:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

白酒:酒文化的教育价值与实践

酒文化作为中国传统文化的重要组成部分&#xff0c;具有丰富的教育价值。云仓酒庄的豪迈白酒作为酒文化的品牌之一&#xff0c;在传承与发展中不断挖掘和发挥酒文化的教育价值。 首先&#xff0c;豪迈白酒有责任传承丰富的历史文化知识。从酒的起源、酿造技艺、酒器文化到酒礼酒…

Github上传大于100M的文件(ubuntu教程)

安装Git-lfs Git Large File Storage (LFS) 使用 Git 内部的文本指针替换音频样本、视频、数据集和图形等大文件&#xff0c;同时将文件内容存储在 GitHub.com 或 GitHub Enterprise 等远程服务器上。官网下载&#xff1a;https://git-lfs.github.com/ ./install.sh上传 比如…

教你如何安装 IntelliJ IDEA

安装 IntelliJ IDEA 的步骤通常如下&#xff0c;这里提供的是基于 Windows 系统的安装指南。 下载 IntelliJ IDEA 1. 访问 JetBrains 官方网站&#xff1a;[https://www.jetbrains.com/idea/download/](Download IntelliJ IDEA – The Leading Java and Kotlin IDE) 2. 选择适…

一文带你入门【论文排版】利器·LaTeX |Macos

小罗碎碎念 我在刚开始写公众号的时候&#xff0c;写过一期推文&#xff0c;详细的讲解过如何使用LaTeX快速的进行论文排版。不过当时用的是windows的系统&#xff0c;这一次把Mac端的教程补上。 windows系统教程 https://zhuanlan.zhihu.com/p/677481269 LaTeX是一种流行的排…

【UIDynamic-动力学-UICollisionBehavior-action Objective-C语言】

一、我们说,这个碰撞行为啊,collision,它里边还有一个属性,叫做action,它能够干什么,它能够实时的去监听, 1.实时的去监听,我们当前的这个view的一个frame的变化, 它会调用action的方法,实际上,action方法,它是一个block,然后呢,view的frame变化的时候,它会一直…

Keil生成bin文件

keil软件默认是只生成hex文件虽然也可以下载但是有时候要用到bin文件 只需要加入以下代码在keil软件中即可 fromelf.exe --bin -o “$LL.bin” “#L” 然后编译 输出信息&#xff0c;可以看到已经生成了bin文件

Nacos从入门到实战

一、Nacos介绍 1.什么是Nacos 官方&#xff1a;一个更易于构建云原生应用的动态服务发现&#xff08;Nacos Discovery&#xff09;、服务配置&#xff08;Nacos Config&#xff09;和服务管理平台 集 注册中心配置中心服务管理 平台 注册中心&#xff1a;把所有的服务注册进去…

第6章 设备驱动程序(3)

目录 6.5 块设备操作 6.5.1 块设备的表示 6.5.2 数据结构 6.5.3 向系统添加磁盘和分区 6.5.4 打开块设备文件 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 6.5 块设备操作 特点&#xff1a; 随机访问任意位置。 固定块大小的传输。 块设备在内…

MySQL进阶——索引【核心】

目录 1索引概述 2索引结构 2.1 B-Tree&#xff08;多路平衡查找树&#xff09; 2.2 BTree 2.3 hash 3索引分类 3.1MySQL中分4类 3.2 InnoDB存储引擎分两类&#xff08;SQL优化中重要&#xff09; 4索引语法 4.1创建和查看索引 4.2删除索引 5 SQL性能分析 5.1 查看执…

Ubuntu安装docker 详细教程

Ubuntu安装docker&#xff0c;以及docker compose踩了一步一步的坑&#xff0c;真的特别抓马&#xff01;&#xff01;&#xff01; 因此分享我的安装教程和踩坑&#xff0c;希望给大家一些帮助吧 安装详细教程 卸载docker停止 docker 运行使用以下命令来卸载 Docker 软件包及其…

国产数据库中读写分离实现机制

在数据库高可用架构下会存在1主多备的部署&#xff0c;备节点可以根据业务场景分发一部分流量以充分利用资源&#xff0c;并减轻主库的压力&#xff0c;因此在数据库的功能上需要读写分离来实现。 充分利用备节点的资源&#xff0c;提升业务的吞吐量&#xff1b;防止运维等非业…

助力低空经济-eVTOL/无人机ADS-B航管应答机选型指南

一、低空经济概述 “低空经济”在今年全国两会首次写入政府工作报告。近日&#xff0c;工业和信息化部、科学技术部、财政部、中国民用航空局印发《通用航空装备创新应用实施方案&#xff08;2024—2030年&#xff09;》&#xff0c;提出到2030年&#xff0c;推动低空经济形成…

c语言回顾-结构体(2)

前言 前面讲了结构体的概念&#xff0c;定义&#xff0c;赋值&#xff0c;访问等知识&#xff0c;本节内容小编将讲解结构体的内存大小的计算以及通过结构体实现位段&#xff0c;话不多说&#xff0c;直接上干货&#xff01;&#xff01;&#xff01; 1.结构体内存对齐 说到计…

自建消息推送工具 Gotify 实现消息私有化通知

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前分享了如何通过 Webhook 将 VPS 与 NAS 上部署的应用消息推送到钉钉、飞书、企业微信,但是对于部分用户来说,可能因为以下种种原因,不方便使用常见的办公 IM 软件来进行消息推送: 消息涉及隐私敏感信息,不希…

11.6.k8s实战-节点扩缩容

目录 一&#xff0c;需求描述 二、集群缩容-节点下线 1&#xff0c;节点下线案例说明 2&#xff0c;查看现有节点 3&#xff0c;查看所有名称空间下的pod ​编辑4&#xff0c;驱逐下线节点的pod 5&#xff0c;驱逐后再次查看pod 6&#xff0c;驱逐pod后再次查看节点信息…

新书速览|Ubuntu Linux运维从零开始学

《Ubuntu Linux运维从零开始学》 本书内容 Ubuntu Linux是目前最流行的Linux操作系统之一。Ubuntu的目标在于为一般用户提供一个最新的、相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量&#xff0c;用户可以方便地从社区获得帮助。《Ubuntu Linux运…

熟练一种编程语言再学另一种语言时,叠的是buff还是debuff?

在大多数情况下&#xff0c;尤其是对于广泛使用的高级编程语言&#xff0c;它们之间存在正向的相互促进作用&#xff0c;熟练使用一种语言后再去学习另一种语言&#xff0c;大概率能叠个buff。 首先&#xff0c;学习编程语言的基础是通用的&#xff0c;比如软硬件和网络基础、算…

iOS原生APP开发的技术难点

iOS原生APP开发的技术难点主要体现在以下几个方面&#xff0c;总而言之&#xff0c;iOS原生APP开发是一项技术难度较高的工作&#xff0c;需要开发者具备扎实的编程基础、丰富的开发经验和良好的学习能力。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xf…

shell中的条件判断

在Linux操作系统中如何是用条件判断语句&#xff0c; 如上图所示&#xff0c;先定义一个变量变量值&#xff0c;再使用test $a hello来判断式子的正确与否&#xff0c;当结果正确的时候返回0&#xff0c;当结果错误时候结果返回1&#xff0c;可以是用echo $? 来获取并打印输出…

AI大模型会如何颠覆手机?

导语&#xff1a;大模型在手机端的落地&#xff0c;不仅仅是AI进入人类生活的开始&#xff0c;也是行业发生颠覆&#xff0c;新老巨头进行更替的时刻。 将大模型变小&#xff0c;再塞进手机&#xff0c;会给人们的生活带来怎样的影响&#xff1f; 最近&#xff0c;荣耀成为了…