SSM学习6:Spring事务

简介

  • 事务作用:在数据层保障一系列的数据库操作同成功同失败
  • Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败
public interface PlatformTransactionManager{void commit(TransactionStatus status) throws TransactionStatus ;void rollback(TransactionStatus status) throws TransactionStatus ;
}

基本流程
1、配置当前接口方法具有事务

public interface AccountService {/*** 转账操作* @param out 传出方* @param in 转入方* @param money 金额*///配置当前接口方法具有事务@Transactionalpublic void transfer(String out,String in ,Double money) ;
}

2、配置事务管理器,mybatis使用的是jdbc事务
JdbcConfig.java

public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;@Beanpublic DataSource dataSource() {DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}//配置事务管理器,mybatis使用的是jdbc事务@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource) {DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();transactionManager.setDataSource(dataSource);return transactionManager;}}

3、开启注解式事务驱动
SpringConfig.java

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
//开启注解式事务驱动
@EnableTransactionManagement
public class SpringConfig {
}

注意:

  • Spring注解式事务通常添加在业务层接口中,而不会添加在业务层接口实现类中,降低耦合
  • 注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务

相关配置

在这里插入图片描述
基本格式

public interface AccountService {/*** 转账操作* @param out 传出方* @param in 转入方* @param money 金额*///配置当前接口方法具有事务@Transactional(readOnly = true,timeout = -1)public void transfer(String out,String in ,Double money) ;
}

回滚

  • 自动回滚,当方法抛出运行时异常(RuntimeException)及其子类或者错误(Error)
  • 显式回滚,对于那些不是运行时异常的受检异常(即 Exception 类型但不属于 RuntimeException 的异常),Spring不会自动回滚事务。然而,你可以在 @Transactional 注解中使用 rollbackFor 属性来指定哪些具体的异常类型应该触发事务回滚。
public interface AccountService {/*** 转账操作* @param out 传出方* @param in 转入方* @param money 金额*///配置当前接口方法具有事务@Transactional(rollbackFor = {IOException.class,FileNotFoundException.class})public void transfer(String out,String in ,Double money) ;
}

设置事务传播行为
在这里插入图片描述

public interface AccountService {@Transactionalpublic void transfer(String out,String in ,Double money) throws IOException;
}
public interface LogService {//propagation设置事务属性:传播行为设置为当前操作需要新事务@Transactional(propagation = Propagation.REQUIRES_NEW)void log(String out, String in, Double money);
}
@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountDao accountDao;@Autowiredprivate LogService logService;public void transfer(String out, String in, Double money) {try {accountDao.outMoney(out, money);int i = 1 / 0;accountDao.inMoney(in, money);} finally {logService.log(out, in, money);}}}

通过设置propagation属性,让某一个操作创建新的事务,保证不会被其他事务的影响

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

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

相关文章

Elasticsearch 角色和权限管理

在大数据和云计算日益普及的今天,Elasticsearch 作为一款强大的开源搜索引擎和数据分析引擎,被广泛应用于日志分析、全文搜索、实时监控等领域。随着业务规模的扩大和数据敏感性的增加,对 Elasticsearch 的访问控制和权限管理也变得越来越重要…

【人工智能】Transformers Pipeline概述

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 欢迎关注微信公众号:野老杂谈 V: LAF20151116 进行更多交流学习 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真…

【网络文明】关注网络安全

在这个数字化时代,互联网已成为我们生活中不可或缺的一部分,它极大地便利了我们的学习、工作、娱乐乃至日常生活。然而,随着网络空间的日益扩大,网络安全问题也日益凸显,成为了一个不可忽视的全球性挑战。认识到网络安…

Python数据分析案例52——基于SSA-LSTM的风速预测(麻雀优化)

案例背景 又要开始更新时间序列水论文的系列的方法了,前面基于各种不同神经网络层,还有注意力机制做了一些缝合模型。 其实论文里面用的多的可能是优化算法和模态分解,这两个我还没出专门的例子,这几天正好出一个优化算法的例子来…

uboot学习:(四)顶层makefile分析

目录 版本号 MAKEFLAGS变量 命令输出 静默输出 设置编译结果输出目录 代码检查(一般不需要使用,了解就行) 模块编译(一般不用uboot编译模块,了解就行) 获取主机架构和系统 设置目标架构、交叉编译…

隔离驱动-视频课笔记

目录 1、需要隔离的原因 1.2、四种常用的隔离方案 2、脉冲变压器隔离 2.1、脉冲变压器的工作原理 2.2、泄放电阻对开关电路的影响 2.3、本课小结 3、光耦隔离驱动 3.1、光耦隔离驱动原理 3.2、光耦隔离驱动的电源进行分析 3.3、本课小结 4、自举升压驱动 4.1…

JS【详解】对象(含对象的存储原理,对象的常用操作,判断对象是否为空对象,对象的深拷贝,对象的创建、遍历、合并、拷贝等)

简介 任何事物都可以看作一个对象,用属性描述它的特征,用方法描述它的行为,如下方代码所示: let obj {name: "朝阳",sayHi: function () {console.log("你好!");}, }; typeOf obj // object变量…

大数据开发中的元数据:从基础到高级应用的全面指南

在大数据开发中,元数据(Metadata)是指描述数据的数据。元数据可以提供有关数据结构、数据类型、数据约束和数据关系的重要信息。合理利用元数据可以显著提高数据建模和管理的效率。本文将详细介绍如何根据元数据建表,并提供一些代…

2024年公司电脑屏幕监控软件推荐|6款好用的屏幕监控软件盘点!

在当今的商业环境中,确保员工的工作效率和数据安全是每个企业管理者的重要任务。屏幕监控软件通过实时监控和记录员工的电脑活动,帮助企业有效地管理和优化工作流程。 1.固信软件 固信软件https://www.gooxion.com/ 主要特点: 实时屏幕监控…

ConditionalOnSingleCandidate注解使用介绍、应用场景以及示例代码

概述 ConditionalOnSingleCandidate 是Spring Framework中的一个条件注解,它用于根据特定类型的 bean 是否有且仅有一个候选者来决定是否创建一个 bean 或者配置一个类。 应用场景 依赖特定类型的唯一bean: 当需要依赖一个特定类型的 bean,并且这种类型…

养殖业饲料加工新选择,粉碎机械提升效率

在当今畜牧业快速发展的时代,饲料加工设备成为提升养殖效益的重要一环。其中,饲料加工粉碎机凭借其G效、便捷的特点,成为了养殖场的得力助手。 饲料加工粉碎机作为养殖业的重要设备之一,其主要功能是将各种原料如玉米、豆粕、麦…

简单的网页压力测试

要进行简单的网页压力测试,可以使用Python的requests库来发起请求,并结合time模块来控制请求频率。以下是一个基本的实现,它会每分钟发送指定次数的请求到目标网址。 import requests import time# 目标网址 url ***# 每分钟请求的次数 req…

【GameFramework扩展应用】6-3、GameFramework框架增加日志保存功能

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群:398291828大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q764424567/article/details/1…

Sentinel限流算法:滑动时间窗算法、漏桶算法、令牌桶算法。拦截器定义资源实现原理

文章目录 滑动时间窗算法基本知识源码算法分析 漏桶算法令牌桶算法拦截器处理web请求 滑动时间窗算法 基本知识 限流算法最简单的实现就是使用一个计数器法。比如对于A接口来说,我要求一分钟之内访问量不能超过100,那么我们就可以这样来实现&#xff1…

(一)高并发压力测试调优篇——MYSQL数据库的调优

前言 在实际项目开发中,很多业务场景下都需要考虑接口的性能要求,追求高并发、高吞吐量。那么对于此类问题如何入手呢?关注作者,不迷路。本节内容主要介绍在数据库db方面的优化,以mysql数据库为例。 关于db的优化&am…

7、matlab实现SGM/BM/SAD立体匹配算法计算视差图

1、matlab实现SGM/BM/SAD立体匹配算法计算视差图简介 SGM(Semi-Global Matching)、BM(Block Matching)和SAD(Sum of Absolute Differences)都是用于计算立体匹配(Stereo Matching)的…

远程帮客户解决“应用程序无法正常启动0xc000007b,请单击确定关闭应用程序”的问题

今天收到反馈,SmartPipe软件,在客户机器上报错,无法正常运行,采用远程控制软件进入客户电脑,发现电脑报错如下: 因为客户的电脑是win7,而之前发生过win7电脑上无法运行OCC编写的软件的情况&…

termux 安装 rockylinux

centos已经被“招安”了,取而代之的是rockylinux,本文记录我自己的配置,主要需求是使用termux安装rockylinux文件系统,并使用supervisor自启动code-server 安装termux 从https://github.com/termux/termux-app/releases/获取最新…

常用视觉分类、目标检测模型性能测试

说明 测试常用CV模型在单张图像上的识别速度,不包含图像读取时间,但包含图像预处理。可以在以后的应用中根据硬件配置选取合适的模型,达到最佳效果。其中推理速度为正常推理的速度,加速CPU使用openvino加速,GPU使用te…

产品经理-一份标准需求文档的8个模块(14)

一份标准优秀的产品需求文档包括: ❑ 封面; ❑ 文档修订记录表; ❑ 目录; ❑ 引言; ❑ 产品概述:产品结构图 ❑ 详细需求说明:产品逻辑图、功能与特性简述列表、交互/视觉设计、需求详细描述&am…