Spring如何实现管理事务

目录

简介:

分类:

1.编程式事务管理:

 2. 声明式事务管理:

3.事务传播和隔离级别:

配置 Spring 事务管理:

总结:


简介:

Spring 通过事务管理器(Transaction Manager)来管理事务。不同的持久化技术(如 JDBC、JPA、Hibernate)对应不同的事务管理器,例如:

DataSourceTransactionManager:用于管理 JDBC 事务。
JpaTransactionManager:用于管理 JPA 事务。
HibernateTransactionManager:用于管理 Hibernate 事务。
事务管理器是 Spring 事务管理的核心,它负责处理事务的开始、提交和回滚。

分类:

1.编程式事务管理:

编程式事务管理是指在代码中显式地管理事务,通常使用 TransactionTemplate 或者底层的 PlatformTransactionManager。

使用 TransactionTemplate:

@Autowired
private TransactionTemplate transactionTemplate;

public void someMethod() {
    transactionTemplate.execute(status -> {
        // 执行业务逻辑
        // status.setRollbackOnly(); // 回滚事务
        return null;
    });
}

使用 PlatformTransactionManager:

@Autowired
private PlatformTransactionManager transactionManager;

public void someMethod() {
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    TransactionStatus status = transactionManager.getTransaction(def);

    try {
        // 执行业务逻辑
        transactionManager.commit(status); // 提交事务
    } catch (Exception e) {
        transactionManager.rollback(status); // 回滚事务
    }
}

 2. 声明式事务管理:

声明式事务管理是通过 AOP(面向切面编程)和注解来管理事务,通常使用 @Transactional 注解。这种方式更加简洁和方便,推荐使用。

使用 @Transactional 注解:

import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {

    @Transactional
    public void someMethod() {
        // 执行业务逻辑
    }
}

3.事务传播和隔离级别:

事务传播和隔离级别是 Spring 事务管理的重要概念。

事务传播(Propagation):定义了事务方法被调用时事务的传播行为。例如,当前方法是否要在一个事务中运行,是否要加入现有的事务,或者是否要开启一个新的事务。
隔离级别(Isolation):定义了一个事务可以看到其他事务对数据的影响程度。常见的隔离级别包括:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE。

配置 Spring 事务管理:

在 Spring Boot 中,只需要在主类或者配置类中添加 @EnableTransactionManagement 注解:

import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class AppConfig {
    // 配置数据源和事务管理器等
}

使用 @Transactional 注解:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional
    public void createUser(User user) {
        // 创建用户的业务逻辑
    }
}

总结:

Spring 的事务管理机制通过编程式事务管理和声明式事务管理两种方式提供了灵活的事务控制。声明式事务管理是最常用的方式,通过 @Transactional 注解,可以方便地控制事务的传播行为、隔离级别、超时时间和回滚规则。

 

 

 


 

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

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

相关文章

【Leetcode】732. 我的日程安排表 III

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 当 k k k 个日程存在一些非空交集时(即, k k k 个日程包含了一些相同时间),就会产生 k k k 次预订。 给你一些日程安排 [startTime, endTime…

Tableau数据可视化与仪表盘搭建-数据连接

连接数据有三种类型 第一种,连接到本地文件,例如Excel,csv,JSON等 第二种,连接到数据库,例如MySQL 注意:连接到数据库要安装对应的数据库的驱动的 连接本地文件

Chapter4.2:Normalizing activations with layer normalization

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.2 Normalizing activations with layer normalization 4 Implementing a GPT model from Scratch To Generate Text 4.2 Normalizing activations with layer normalization 通过层归一化(La…

搭建开源版Ceph分布式存储

系统:Rocky8.6 三台2H4G 三块10G的硬盘的虚拟机 node1 192.168.2.101 node2 192.168.2.102 node3 192.168.2.103 三台虚拟机环境准备 1、配置主机名和IP的映射关系 2、关闭selinux和firewalld防火墙 3、配置时间同步且所有节点chronyd服务开机自启 1、配置主机名和…

GPIO、RCC库函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_AFIODeInit(void); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //输出 读 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,…

使用JMeter玩转tidb压测

作者: du拉松 原文来源: https://tidb.net/blog/3f1ada39 一、前言 tidb是mysql协议的,所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具,直接使用mysql的jdbc驱动包即可。 二、linux下安装jmet…

Launcher3主页面加载显示流程分析

布局结构 抓取布局后,可以看到每个图标是一个DoubleShadowBubbleTextView,父布局是CellLayout、workspace。 我们可以在CellLayout添加子view打印出调用堆栈信息,可以整体上看页面加载显示流程。 主要类 Launcher.java:主界面&…

开发培训:慧集通(DataLinkX)iPaaS集成平台-基于接口的连接器开发(不需要认证机制)

一、开发一个简单的应用0源,本实例中对接的应用不需要接口认证 1、【连接管理-自建】新建应用源,保存并发布 代码示例 return {$$ - >//日志打印$$.$Log.info(日志打印) } 二、使用应用,建立应用连接 1、实例创建,【连接管理…

pikachu靶场--目录遍历和敏感信息泄露

pikachu靶场—目录遍历和敏感信息泄露 目录遍历 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再…

机器学习详解(13):CNN图像数据增强(解决过拟合问题)

在之前的文章卷积神经网络CNN之手语识别代码详解中,我们发现最后的训练和验证损失的曲线的波动非常大,而且验证集的准确率仍然落后于训练集的准确率,这表明模型出现了过拟合现象:在验证数据集测试时,模型对未见过的数据…

Word2Vec解读

Word2Vec: 一种词向量的训练方法 简单地讲,Word2Vec是建模了一个单词预测的任务,通过这个任务来学习词向量。假设有这样一句话Pineapples are spiked and yellow,现在假设spiked这个单词被删掉了,现在要预测这个位置原本的单词是…

#渗透测试#漏洞挖掘#WAF分类及绕过思路

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

电子应用设计方案85:智能 AI门前柜系统设计

智能 AI 门前柜系统设计 一、引言 智能 AI 门前柜系统旨在提供便捷、安全和智能的物品存储与管理解决方案,适用于家庭、公寓或办公场所的入口区域。 二、系统概述 1. 系统目标 - 实现无接触式物品存取,减少交叉感染风险。 - 具备智能识别和分类功能&am…

如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13

您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…

线性代数考研笔记

行列式 背景 分子行列式:求哪个未知数,就把b1,b2放在对应的位置 分母行列式:系数对应写即可 全排列与逆序数 1 3 2:逆序数为1 奇排列 1 2 3:逆序数为0 偶排列 将 1 3 2 只需将3 2交换1次就可以还原原…

设计心得——流程图和数据流图绘制

一、流程图和数据流图 在软件开发中,画流程图和数据流图可以说是几乎每个人都会遇到。 1、数据流(程)图 Data Flow Diagram,DFG。它可以称为数据流图或数据流程图。其主要用来描述系统中数据流程的一种图形工具,可以将…

SpringBoot框架开发中常用的注解

文章目录 接收HTTP请求。RestController全局异常处理器Component依赖注入LombokDataBuildersneakyThrowsRequiredArgsConstructor 读取yml文件配置类注解 接收HTTP请求。 RequestMapping 接收HTTP请求。具体一点是 GetMapping PostMapping PutMapping DeleteMapping 一共…

ELK日志平台搭建 (最新版)

一、安装 JDK 1. 下载 JDK 21 RPM 包 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm2. 安装 JDK 21,使用 rpm 命令安装下载的 RPM 包: sudo rpm -ivh jdk-21_linux-x64_bin.rpm3. 配置环境变量 编辑 /etc/profile 文件以配置 JAVA_HO…

使用 Jupyter Notebook:安装与应用指南

文章目录 安装 Jupyter Notebook1. 准备环境2. 安装 Jupyter Notebook3. 启动 Jupyter Notebook4. 选择安装方式(可选) 二、Jupyter Notebook 的基本功能1. 单元格的类型与运行2. 可视化支持3. 内置魔法命令 三、Jupyter Notebook 的实际应用场景1. 数据…

AcWing-164.可达性统计(拓扑排序 + 位运算)

原题链接:164. 可达性统计 - AcWing题库 题目描述: 题目 输入格式 输出格式 数据范围 输入样例: 输出样例: 思路 AC代码: 题目描述: 题目 给定一张 𝑁 个点 𝑀 条边的有向无…