事务@Transactional

@Transactional 注解和事务的使用、失效情况 针对隔离性的强度,共有以下事务提交之后事务还没有提交能被其他的事务看到因此,有下述三个事务的隔离级别脏读不可重复读幻读不可重复读的和幻读很容易混淆,不可重复读侧重于修改幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。 阅读详情

目录

一、简介

二、spring事务到底用于service层还是dao层

三、嵌套事务


一、简介

可以采用MyBatis控制事务
事务应该在业务逻辑层控制
硬编码方式,代码繁琐,且破坏分层,代码不易维护

可以采用AOP的方式实现
Spring提供了声明式事务支持

propagation:事务传播机制
REQUIRED(默认值)
REQUIRES_NEW 、MANDATORY、NESTED
SUPPORTS
NOT_SUPPORTED、NEVER

1.propagation:事务传播机制。
(1.)REQUIRED:默认值,表示如果存在一个事务,则支持当前事务;如果当前没有事务,则开启一个新的事务。
(2.)REQUIRES_NEW:表示总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起,开启新事务执行该方法。
(3.)MANDATORY:表示如果存在一个事务,则支持当前事务;如果当前没有一个活动的事务,则抛出异常。
(4.)NESTED:表示如果当前存在一个活动的事务,则创建一个事务作为当前事务的嵌套事务运行;如果没有当前事务,该取值与REQUIRED相同。
(5.)SUPPORTS:表示如果存在一个事务,则支持当前事务;如果当前没有事务,则按非事务方式执行。
(6.)NOT_SUPPORTED:表示总是以非事务方式执行。如果一个事务已经存在,则将这个存在的事务挂起,然后执行该方法。
(7.)NEVER:表示总是以非事务方式执行。如果当前存在一个活动的事务,则抛出异常。
2.isolation:事务隔离等级
(1.)DEFAULT:默认值,表示使用数据库默认的事务隔离级别。
(2.)READ_UNCOMMITTED:未提交读。
(3.)READ_COMMITTED:提交读。
(4.)REPEATABLE_READ:可重复读。
(5.)SERIALIZABLE:串行读。

3.timeout:事务超时时间,允许事务运行的最长时间,以秒为单位。默认值为-1,表示不超时
4.read-only:事务是否为只读,默认值为false
5.rollback-for:设定能够触发回滚的异常类型
Spring默认只在抛出runtime exception时才标识事务回滚
可以通过全限定类名指定需要回滚事务的异常,多个类名用逗号隔开
6.no-rollback-for:设定不触发回滚的异常类型
Spring默认checked Exception不会触发事务回滚
可以通过全限定类名指定不需回滚事务的异常,多个类名用英文逗号隔开

 

二、spring事务到底用于service层还是dao层

Spring事务为业务逻辑进行事务管理,保证业务逻辑上数据的原子性。

事务得根据项目性质来细分:事务可以设置到三个层面(dao层、service层和web层)。 

第一:web层事务,这一般是针对那些安全性要求较高的系统来说的。例如电子商务网站。粒度小,一般系统用不着这么细。 

第二:service层事务,这是一常见的事务划分, 将事务设置在业务逻辑上,只要业务逻辑出错或异常就事务回滚。粒度较小,一般推荐这种方式。

第三:数据持久层数据务,也就是常说的数据库事务。这种事务在安全性方面要求低。就是给一个简单的增删改之类的操作增加事务操作。粒度大

给Service层配置事务,因为一个Service层方法操作可以关联到多个DAO的操作。在Service层执行这些Dao操作,多DAO操作有失败全部回滚,成功则全部提交。

事务分为业务事务和系统事务,业务事务也就是业务逻辑上操作的一致性,系统事务自然就是指真正的数据库事务,

Spring配置事务的是为了什么进行管理,当然是为业务逻辑进行事务管理,保证业务逻辑上数据的原子性;

Dao层是什么,数据访问层,是不应该包含业务逻辑的,这就是和Service层的不同;

Service层就是业务逻辑层,事务的管理就是为Service层上的保证。

三、嵌套事务

Spring事务管理是通过JDK动态代理的方式进行实现的,只有代理对象proxy直接调用的那个方法才是真正的走代理的;所以嵌套使用@Transactional,内部的@Transactional是无效的。

 

参考:

https://blog.youkuaiyun.com/haoxin1805487180/article/details/83119508

https://www.cnblogs.com/hutton/p/5493095.html

https://blog.youkuaiyun.com/qq_33101675/article/details/83012379

SpringBoot事务管理之@Transactional的使用 概述 什么是事务?举个简单的例子,假如小明现在打算从自己的银行账户转账5W元至小花的银行账户,这涉及到了两个操作,第一个是从小明的账户内提走5W,第二个是将这5W块汇入小花的账户,如果第一步操作正常而第二步操作出了问题,那么我们要保证第一步操作能被撤销掉,否则小明就要天台见了。。。 那么事务管理就是解决这一类问题的有效手段,它保证一组操作要么全部完成(提交Commit),要么有任何一环出现差错就要... 阅读详情

相关推荐

Unity3D移动平台简单实现

在电子游戏中移动平台可谓是十分常见的,如平台从一处至另一处的来回移动,或当需要玩家触发机关时,平台浮动并按一定的路线移动至目标处。本文主要是在Unity3D引擎下使用少量脚本实现两点之间来回移动平台的最基本功能,是一种比较简单且好理解的移动平台解决方案。 涉及到的点如下: 平台对象的实现 平台移动路线的设定 处于平台上游戏对象(如:玩家)的相对运动 创建平台控制对象 创建平台实...

长溪木可的博客 4683

Spring——事务注解@Transactional【建议收藏】

下面介绍@Transctional的用法,包括:注解参数设置,事务方法调用的几种不同case,事务如何回滚,常见的事务失效的场景以及使用建议;

GitHub质检员 6048

群晖Web Station实战:从零搭建个人静态导航站

本文详细介绍了如何利用群晖NAS自带的Web Station套件,从零开始搭建个人静态导航站。通过安装Web Station、上传静态网站源码、配置网页服务与网络门户等步骤,无需代码基础即可实现内网访问。文章还分享了文件权限设置、个性化定制及常见问题排查等实用技巧,帮助用户高效管理个人常用网址,充分挖掘NAS的服务器潜能。

tea88的博客 1330

SpringBoot @Transactional事务详解

当Java中一个方法内有多次对数据库的增删改查等操作,并且这些操作之间有一些关联关系,如果方法执行一半出问题报错,后面的操作将不会执行,造成数据异常,但是使用了事务以后可以如果中途执行失败,可以回退到方法执行之前,保证数据不出问题。事务要么全部都被执行,要么就全都不被执行,如果有子事务提交失败,那么其他子事务对数据库的操作将被回滚,数据库回到事务提交前的状态;注解,默认会回滚所有事务,前提下,一定要主动抛出异常,否则事务是不会生效的。下面是异常类和子类关系图,@Transactional,不加任何参数时,

Tongyao 4074

ilqr算法原理推导及代码实践

ilqr算法原理详解

Forwarding3的博客 1741

仓储控制系统(WCS)设计

WCS系统设计方法

cetclyb的博客 2万+

事务注解@transactional

事务的基本概念 先来回顾一下事务的基本概念和特性。数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务,就必须具备ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability) 编程式事务与声明式事务 编程式事务需要在代码中显式调...

fwk19840301的博客 2133

【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)

输入高级模式密码进入高级模式高级模式界面有操作栏、控制栏、参数栏及参数界面操作栏名称功能说明文件加载数据从板卡加载参数保存将参数保存到主板退出退出高级模式固件导入固件导入配套版本下的固件配置*xpcfx导出固件导出当前使用的固件配置*xpcfx导入波形文件导入对应的波形文件*waf操作初始化系统继续初始化动作复位X轴复位回原点控制栏可进行小车运动、闪喷操作(此闪喷为点击进行闪喷,不受平台位置限制),无清洗功能。

Print World的专栏 3112

知识点复习11 Spring 事务的传播属性

七种传播属性。 事务传播行为 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。Trans...

郭传志的博客 282

UE5.3与Colosseum配置实战:从编译到问题解决的全流程指南

本文提供了在Windows系统下配置UE5.3与Colosseum仿真环境的全流程实战指南。详细介绍了从软件版本选择、源代码获取、编译脚本执行到解决常见编译错误和引擎崩溃问题的具体步骤,旨在帮助开发者高效搭建无人机、机器人等仿真平台,并顺利运行外部API控制。

weixin_29002595的博客 557

​网格划分理论:CFD理论67 网格划分-三大理论问题_哔哩哔哩_bilibili传统解释非结构化网格是不对的——计算传热学大叔专题讨论2--CFD网格类型_哔哩哔哩_bilibili

传统解释非结构化网格是不对的——计算传热学大叔。fluent计算理论和离散方法原理视频推荐。

qq_15963745的博客 183

@Transactional事务的使用和注意事项及其属性

一、注意事项 不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,不然注解可能无效。 不要将@Transactional放置在类级的声明中,放在类声明,会使得全部方法都有事务。所以@Transactional应该放在方法级别,不需要使用事务的方法,就不要放置事务,好比查询方法。不然对性能是有影响的。 使用了@Transactional的方法,对同一个类里面的方法调用, @Transactional无效。 好比有一个类Test,它的一个方法A,A再调

Nothing is impossible to a willing heart. 1万+

【Tessy】集成测试小白入门指导

本文详细介绍了如何进行集成测试的小白入门指导,从新建工程到设计用例,实现集成测试的过程详细步骤

qq_37282365的博客 1189

@Transactional 事务注解

1.Spring @Transactional 详解:何时使用、为什么使用、如何使用。当你需要执行多个数据库操作,且这些操作必须具备原子性(要么全部成功,要么全部失败)。2.工作 6 年,@Transactional 注解用的一塌糊涂!可以通过 rollbackFor 来修改默认规则。Spring 的事务管理主要基于。private 方法不生效。事务方法调用自身不会生效。

Blue_Pepsi_Cola的博客 2002

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

spring的@Transactional事务原理理解

‌REQUIRES_NEW‌:总是创建一个新的事务,如果当前存在事务,则将当前事务挂起,新的事务结束后,再恢复之前被挂起的事务。‌NOT_SUPPORTED‌:不使用事务,如果当前存在事务,则将其挂起,直到该方法完成后再继续执行。‌MANDATORY‌:必须在一个已存在的事务中执行,如果当前没有事务则抛出异常。‌NESTED‌:如果当前存在事务,则在嵌套事务内执行;‌NEVER‌:不允许在事务中执行,如果当前存在事务,则抛出异常。可以看成如下,如果有事务,则是 有嵌套的,但是到底要不要,则可以自由决定。

master-dragon的专栏 1724

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Spring】事务和@Transactional注解

结果:两个函数对数据库的操作都回滚了,因为 A被标记为 @Transactional,当它被调用时,会开启一个事务,当 A调用 B时,因为 B没有事务控制,所以它将直接在当前的事务上下文中执行。因为方法 A 运行在没有事务的上下文中,方法 B 的 @Transactional 注解不会生效,如果方法 B 抛出异常,方法 A 也会捕获到这个异常,但不会导致任何事务回滚,因为方法 A 没有事务控制。如果方法 A 有事务,方法 B 将创建一个新的事务,方法 A 的事务会被挂起。如果没有,则创建一个新的事务。

Andy_奋斗的博客 2725

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring 事务@Transactional

事务:事务传播行为isolation:隔离级别timeout:超时设置(单位:秒)readOnly:事务是否只读。如果设置为 true,Spring 会优化事务的执行,比如不会进行脏读。:哪些异常会导致事务回滚。默认情况下,运行时异常会导致事务回滚,而检查型异常不会。:哪些异常不会导致事务回滚。

qq_35215728的博客 888

Spring是如何管理事务的之@Transactional注解详解

如果想要方法 1 和方法 2 均单独保持事务一致性怎么办呢,刚说过了,如果不是用代理调用 @Transactional 注解是不生效的,所以一定要使用代理调用实现,然后让方法 1 和方法 2 分别单独开启新的事务,便 OK 啦。第一点要注意的就是在 @Transactional 注解的方法中,再调用本类中的其他方法 method2 时,那么 method2 方法上的 @Transactional 注解是不!答案是结果和上面是一致的。通过代理对象在目标对象前后进行方法增强,也就是事务的开启提交和回滚。

weixin_43439425的博客 2427

事务管理——@Transactional

是 Java 中用于声明式事务管理的关键注解,通常与 Spring 框架一起使用。它允许开发者通过简单的注解方式来管理事务,而无需手动编写事务控制代码(如commit()rollback()等)。

qq_57019146的博客 3014

Spring Boot 中使用 @Transactional 注解配置事务管理

Spring Boot 中使用 @Transactional 注解配置事务管理

weixin_40497755的博客 3492

【Spring事务】@Transactional的使用案例

(1)NESTED 与 REQUIRES_NEW 的区别:NESTED 是主事务的子事务,依赖主事务存在(主事务回滚则子事务也回滚)。REQUIRES_NEW 是完全独立的事务,与主事务无依赖(主事务回滚不影响子事务)。(2)数据库支持:NESTED 依赖数据库的保存点(Savepoint)机制(如 MySQL、PostgreSQL 支持),部分数据库可能不支持。(3)性能影响:过多 REQUIRES_NEW 会创建大量独立事务,增加数据库开销。

weixin_44823875的博客 1097

@Transactional开启事务以及@Transactional属性配置

@Transactional事务有如下可添加参数: 参数名 参数值 参数作用 noRollbackFor Class<? extends Throwable>[] 一组异常类,遇到时不回滚。默认为{} isolation 枚举org.springframework.transaction.annotation.Isolation的值 事务隔离级别 noRollbackForClassName Stirng[] 一组异常类名,遇到时不回滚,默认为{} propagati

weixin_44976835的博客 5691

事务及事务失效等@Transactional

@Transactional注解相关,事务应用的一些记录

weixin_43928050的博客 655

从@Transactional注解看Spring事务

在使用Spring事务时,我们只需在某方法上使用@Transactional注解简单的标注一下,便可以实现很强大的事务控制功能,这其中的缘由,看小编娓娓道来; 首先需要明确:在spring事务的切面中,实际上是一个Around切面,在注解的业务方法前后都可以被调用,而实际上实现切面操作的是TransactionInterceptor类; [本篇我们先从实例代码...

GO BEYOND YOURSELF 662

事务失效场景@Transactional

类上要有注解,才能走代理;方法必须是public;

weixin_42919267的博客 927
上一篇: JVM内存分配和GC
下一篇: JAVA设计模式UML图
九号铅笔芯
博客等级 码龄9年 9粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值