Spring的事务步骤

news2024/11/26 2:28:31

一、事务处理方案:

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 方法发生异常后要回滚业务。

 

 

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

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

相关文章

关于二分法的理解(以JS为例)

算法介绍 基本概念 二分查找算法&#xff0c;又称折半查找算法&#xff0c;是一种在有序数组中查找特定元素的高效方法。它的核心思想是将数组分成两半&#xff0c;然后根据目标值与中间元素的比较结果来决定是继续在左半部分还是右半部分进行搜索。 工作原理 初始化&#…

编译安装qemu-devel @FreeBSD

缘起 使用cbsd创建riscv jail的时候提示&#xff1a; you have no qemu-user, please install qemu-devle with BSD_USER and STATIC ops (emulators/qemu-devel) 使用pkg安装之后&#xff0c;创建的riscv jail启动报错&#xff1a; Starting jail: fbriscv, parallel timeo…

【猫狗分类】Pytorch VGG16 实现猫狗分类2-模型构建

背景 数据处理做好了&#xff0c;现在搭建网络 声明&#xff1a;整个数据和代码来自于b站&#xff0c;链接&#xff1a;使用pytorch框架手把手教你利用VGG16网络编写猫狗分类程序_哔哩哔哩_bilibili 我做了复现&#xff0c;并且记录了自己在做这个项目分类时候&#xff0c;一…

【回文 马拉车】214. 最短回文串

本文涉及知识点 回文 马拉车 LeetCode214. 最短回文串 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1&#xff1a; 输入&#xff1a;s “aacecaaa” 输出&#xff1a;“aaacecaaa” 示…

string类的使用手册

1.构造函数 补充&#xff1a;npos&#xff1a;size_t类型数据的最大值 default (1) string(); 构造空的string类对象 copy (2) string (const string& str); 拷贝构造函数&#xff08;深拷贝&#xff09; substring (3) string (const string& str, size_t pos, size_…

python 实现各种数据分析方法

1、相关性分析 1.1、https://zhuanlan.zhihu.com/p/669355778https://zhuanlan.zhihu.com/p/669355778

【AI学习】Together AI的新研究:Together MoA(Mixture of Agents)

第一次听说Mixture of Agents&#xff0c;原来Agent也能混合&#xff0c;有意思&#xff01; 介绍 Together AI的最新研究“Together MoA”&#xff08;Mixture of Agents&#xff0c;代理混合&#xff09;是一种创新的方法&#xff0c;旨在通过结合多个开源大型语言模型&…

Postman使用教程(Postman详细图文教程)

本文讲解的是postman工具安装、postman安装教程、postman工具下载、postman使用教程。Postman使得得开发人员和测试人员能够更高效地与Web服务进行交互和调试。 Postman不仅支持常见的HTTP方法&#xff0c;如GET、POST、PUT、DELETE等&#xff0c;还提供了丰富的请求编辑功能&…

Linux---防火墙

文章目录 目录 文章目录 前言 一.静态防火墙&#xff1a;iptables iptables五链 iptables 四表 iptables控制类型 iptables命令配置 前言 这儿主要介绍Linux系统本身提供的软件防火墙的功能&#xff0c;即数据包过滤机制。 数据包过滤&#xff0c;也就是分析进入主机的网络数…

Ubuntu20.04配置ORBSLAM2并在kitti数据集序列进行实验

一、ORB-SLAM2 安装和编译 1.ORB-SLAM2下载 用以下命令在终端上下载 git clone https://github.com/raulmur/ORB_SLAM2 2.安装Pangolin 在下载了ZIP压缩包后解压缩放在ubantu的/home下&#xff08;此处只要是英文路径都可以&#xff09;&#xff0c;但别急着安装Pangolin我…

STM32项目分享:智慧农业(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

PCIe总线-RK3588 PCIe子系统简介(八)

1.PCIe子系统 RK3588 PCIe子系统如下图所示。总共拥有5个PCIe控制器。PCIe30X4(4L)支持RC和EP模式&#xff0c;其他4个仅支持RC模式。ITS port 1连接PCIe30X4(4L)和PCIe30X2(2L)控制器&#xff0c;PCIe30X4(4L)和PCIe30X2(2L)控制器使用PCIe3.0 PIPE PHY。ITS port 0连接PCIe3…

mysql:简单理解mysql mvcc的可重复读

# 原理 假设有这样的sql begin select&#xff08;或update、insert、delete&#xff09; ... commit当执行【begin】的时候&#xff0c;标记有一个新事务要开始&#xff0c;但是事务还没有真正开始&#xff0c;事务id还没有产生当执行事务里面的第一个sql语句时&#xff08;…

VCG显示——汉字,数字,图像

详细的介绍资料&#xff1a; 【从零开始走进FPGA】 玩转VGA http://www.cnblogs.com/spartan/archive/2011/08/16/2140546.html 【FPGA实验】基于DE2-115平台的VGA显示_vga接口实验 de2-115-CSDN博客 【FPGA】VGA显示文字、彩条、图片——基于DE2-115-CSDN博客 一.VCG原理 1.1…

区块链中的gas与转账收款相关概念

区块链是一个经济系统 计算与存储系统都是稀缺的&#xff0c;区块链的工作需要消耗资源共识、trustless需要矿工的工作&#xff0c;而矿工需要激励Transaction的执行有成本&#xff08;gas&#xff09;,gas费成为矿工的奖励ether是这个经济生态系统的通行货币 关心的问题 合…

Stable Diffusion vs DALL·E3

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

父亲节:我要做爸爸的健康监督员

父亲节将至&#xff0c;总想着能为爸爸做些什么&#xff0c;来表达我们的感激与关爱。在这个特殊的日子里&#xff0c;成为爸爸的健康监督员&#xff0c;用华为 Watch 4 的智慧健康功能&#xff0c;任何时刻都可以关注爸爸的健康状况&#xff0c;放心又安心了。 用一键微体检…

C++ 50 之 继承中的对象模型

继承中的对象模型 在C编译器的内部可以理解为结构体&#xff0c;子类是由父类成员叠加子类新成员而成&#xff1a; #include <iostream> #include <string> using namespace std;class Base03{ public:int m_a; protected:int m_b; private:int m_c; // 哪怕是…

DNS域名解析----分离解析、多域名解析、父域与子域

1 理论部分 1.1 分离解析 DNS的分离解析&#xff0c;是指根据不同的客户端提供不同的域名解析记录。来自不同地址的客户机请求解析同一域名时&#xff0c;为其提供不同的解析结果。也就是内外网客户请求访问相同的域名时&#xff0c;能解析出不同的IP地址&#xff0c;实现负载…

汇编:Linux汇编基本框架与系统调用

在Linux操作系统下进行汇编编程时&#xff0c;基本的汇编程序框架通常包括以下几个部分&#xff1a; ①全局段声明&#xff08;section declarations&#xff09;&#xff1a;定义数据段、代码段等。 ②入口点&#xff08;entry point&#xff09;&#xff1a;程序的执行起点…