springboot 事务管理 详细介绍

        在Spring Boot中,事务管理是一种关键的特性,它确保了数据的完整性和一致性。Spring Boot提供了对事务管理的内置支持,使得在应用程序中使用事务变得非常简单。
        事务管理的基本概念
        事务是指一系列操作,这些操作要么全部执行,要么全部不执行,以确保数据的完整性和一致性。在关系型数据库中,事务通常由数据库管理系统(DBMS)来管理。Spring框架提供了一个抽象层,允许你在不直接与DBMS交互的情况下管理事务。
        事务管理的方式
        Spring Boot支持两种类型的事务管理:编程式事务管理和声明式事务管理。
        编程式事务管理
        编程式事务管理涉及使用`TransactionTemplate`或者直接使用`PlatformTransactionManager`来管理事务。这种方法需要在代码中显式地开始事务、提交事务或者回滚事务。
        

@Service
public class TransactionalService {@Autowiredprivate TransactionTemplate transactionTemplate;public void transactionalMethod() {TransactionStatus status = transactionTemplate.getTransactionManager().getTransaction(new DefaultTransactionDefinition());try {// 执行业务逻辑transactionTemplate.commit(status);} catch (Exception e) {transactionTemplate.rollback(status);}}
}


        
        声明式事务管理
        声明式事务管理通过`@Transactional`注解来实现,它将事务管理与业务逻辑代码分离。这种方式更加简洁和易读,是Spring Boot中推荐的事务管理方式。
        

@Service
public class TransactionalService {@Transactionalpublic void transactionalMethod() {// 执行业务逻辑}
}


        
        使用`@Transactional`注解
        `@Transactional`注解可以应用于类或者方法上。当应用于类上时,该类的所有公共方法都将被事务化。当应用于方法上时,只有该方法会被事务化。
`@Transactional`注解有多个属性可以配置:
- `propagation`:定义事务的传播行为,默认值为`REQUIRED`。
- `isolation`:定义事务的隔离级别,默认值为`DEFAULT`。
- `timeout`:定义事务的超时时间,默认值为-1,表示不超时。
- `readOnly`:定义事务是否为只读,默认值为`false`。
- `rollbackFor`:定义导致事务回滚的异常类型。
- `noRollbackFor`:定义不会导致事务回滚的异常类型。
        事务管理器
        要使事务管理生效,你需要配置一个`PlatformTransactionManager`。Spring Boot会根据你配置的数据源自动配置一个合适的`PlatformTransactionManager`。例如,如果你使用的是JPA,它会配置一个`JpaTransactionManager`。
        事务注解的位置
- 当`@Transactional`注解应用于类上时,该类的所有公共方法都将被事务化。
- 当`@Transactional`注解应用于方法上时,只有该方法会被事务化。
- `@Transactional`注解不能应用于静态方法上。
        事务的隔离级别
        事务的隔离级别定义了事务在执行时如何处理多线程并发访问同一数据源的情况。常见的隔离级别包括:
- `DEFAULT`:使用数据库默认的隔离级别。
- `READ_UNCOMMITTED`:最低隔离级别,允许读取未提交的数据变更。
- `READ_COMMITTED`:只允许读取已提交的数据变更。
- `REPEATABLE_READ`:确保同一事务中的所有查询都会得到相同的数据视图。
- `SERIALIZABLE`:最高隔离级别,完全服从ACID的隔离级别。
        事务的传播行为
        事务的传播行为定义了当一个事务方法被另一个事务方法调用时,事务应该如何传播。 `@Transactional`注解的`propagation`属性可以设置不同的传播行为,常见的传播行为包括:
- `REQUIRED`:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
- `SUPPORTS`:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
- `MANDATORY`:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
- `REQUIRES_NEW`:总是创建一个新的事务,并且暂停当前的事务。
- `NOT_SUPPORTED`:以非事务方式执行操作,如果当前存在事务,则暂停当前的事务。
- `NEVER`:如果当前存在事务,则抛出异常。
- `NESTED`:如果当前存在事务,则创建一个嵌套的事务;如果当前没有事务,则创建一个新的事务。
        事务的只读属性
        `@Transactional`注解的`readOnly`属性可以设置事务是否为只读。如果设置为`true`,则表示事务中的所有操作都是只读的,这可以告诉数据库优化查询,例如禁用更新。
        事务的超时和回滚规则
        `@Transactional`注解的`timeout`属性可以设置事务的超时时间。如果事务执行时间超过这个值,则事务会自动回滚。
        `@Transactional`注解的`rollbackFor`和`noRollbackFor`属性可以指定哪些异常会导致事务回滚,以及哪些异常不会导致事务回滚。
        总结
        Spring Boot通过其对事务管理的内置支持,使得在应用程序中实现事务变得非常简单。无论是通过编程式还是声明式事务管理,Spring Boot都能提供强大的事务控制能力,确保数据的完整性和一致性。通过合理地使用事务,你可以提高应用程序的稳定性和可靠性。

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

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

相关文章

15-55V输入自动升降压 光伏MPPT自动跟踪充电方案 大功率300瓦

1.MPPT原理--简介 MPPT,全称为Maximum Power Point Tracking,即最大功点跟踪,它是一种通过调节电气模块的工作状态,使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中,可有效地…

【蓝桥杯】算法模板题(Floyd算法)

一.弗洛伊德算法 用途:用来求解多源点最短路径问题。 思想:Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。 主要步骤: 1)初始化:使用邻接矩阵初始化dis…

第十四届“中关村青联杯”全国研究生数学建模竞赛-A题:无人机在抢险救灾中的优化运用

目录 摘 要: 1 问题重述 1.1 问题背景 1.2 待解决的问题 2 模型假设及符号说明

GitHub仓库文件部署

目录 软件下载和安装 git创建仓库 Github仓库配置 git管理软件配置 Git管理 软件下载和安装 首先需要下载git,以及git管理软件,对其进行安装。 git创建仓库 首先需要创建仓库,在本地仓库文件夹cmd之后输入以下指令创建git仓库文件。 …

解决laravel-admin安装报错1071 Specified key was too long问题

在执行php artisan admin:install命令安装laravel-admin的时候,如果你使用的数据库是MySQL v5.7.7以下版本就会报下面的错: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL:…

课时39:表达式_运算符_简单计算

3.1.2 简单计算 学习目标 这一节,我们从 [ ] 、 l e t 、 ( ( ) ) 、 []、let、(())、 []、let、(())、(())、小结 五个方面来学习。 $[] 简介 $[]方法,常用于整数计算场景,适合不太复杂的计算,运算结果是小数的也会自动取整…

递归读取文件夹下的所有文件

水一篇文章 🐶 代码 package file;import org.apache.commons.lang3.StringUtils; import org.junit.Test;import java.io.File; import java.util.Objects;/*** FlattenDirFiles** author allens* date 2024/2/19*/ public class FlattenDirFiles {// 文件数量pri…

小米空气净化器2s使用体验

这个产品最早上市是2017年,我买回来实际上只用了1年就弃用了,性能不行,使用体验也不好。 打算买新的空气净化器,抽空吐槽一下。 这个净化器发售价是899,在当时来说算中下水平的,小米的,有米家…

什么是跨端,常用的跨端技术

跨平台是跨操作系统,跨端是指客户端 常见的客户端有,web、android、ios 等,客户端的特点是有界面、由逻辑,所以包含逻辑跨端和渲染跨端。 常用的跨端技术方案 React Native: 由 Facebook 推出的开源框架,…

Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程

点击下载《Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程》添加链接描述 1. 前言 本文旨在介绍Spring Boot与LiteFlow的集成方法,详细阐述LiteFlow的原理、使用流程、步骤以及代码注释。通过本文,读者将能够了解LiteFlow的特…

数据分析师SQL面试准备(part1)

1. SQL 万能框架 2. SQL的书写顺序,跟程序真的执行顺序不同 3. 4. 5. 6. 7. case when utilization 8. 9. 10. 11.

OpenHarmony—UIAbility组件间交互(设备内)

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启动三方支付UIAbility)。 本章节将从如下场…

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型

多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型 目录 多维时序 | Matlab实现LSTM-Mutilhead-Attention长短期记忆神经网络融合多头注意力机制多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基…

01.Redis中间件实战1

Redis中间件实战1 Redis各种数据结构实战 字符串 需求:将用户信息存储至缓存中,实现每次前端请求获取用户个人详情时直接从缓存中获取。来演示字符串的写入与读取。 技术方案:为了实现这个需求,首先需要建立用户对象实体,里面包含用户个人的各种信息,包括ID、年龄、姓…

Windows 命令提示符(CMD)操作(三):用户管理

三、用户管理 3.1 net user 管理用户帐户,如创建、删除用户 一般语法: net user [username [password | *] [options]] [/domain] [/add] [/delete] [/expires:{date | never}] [/active:{yes | no}]常见选项和参数包括: [username]&…

化学空间可视化(chemical space visualization)开源软件ChemPlot的安装及使用

文章目录 前言一、ChemPlot是什么?二、conda环境安装ChemPlot1. 创建conda环境2. 安装chemplot及需要的包3. 检验安装 三、使用步骤1. 化合物数据库可视化使用方法BBBP数据库的t-SNE降维后可视化:BBBP数据库的PCA降维后可视化:BBBP数据库的UM…

qt QXlsx操作 excel 单元格

1.单元格设置宽度 m_pxlsx->setColumnWidth(5, 10);//5为列,10为列的宽度,excel表格中默认单元格宽度为9.36英寸 注意:单元格列宽的单位是英寸,默认的单元格列宽为9.36英寸。 注意:单元格列宽单位不是像素。 我之…

shapely 笔记:基本方法

1 线性方法 1.1 object.interpolate(distance[, normalizedFalse]) print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(1.5)) #POINT (0.5 1)print(LineString([(0, 0), (0, 1), (1, 1)]).interpolate(0.75, normalizedTrue)) #POINT (0.5 1) LineString([(0, 0), (0…

JimuReport积木报表 v1.7.0 变革版本发布,低代码报表设计工具

项目介绍 一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成报…

从零开始的 dbt 入门教程 (dbt core 开发进阶篇)

引 在上一篇文章中,我们花了专门的篇幅介绍了 dbt 更多实用的命令,那么我们继续按照之前的约定来聊 dbt 中你可能会遇到的疑惑以及有用的概念,如果你是 dbt 初学者,我相信如下知识点一定会对你有极大的帮助: 了解 dbt_…