@Transactional的超详细介绍

详解:事务注解 @Transactional ,另外,配置类事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事。事务的传播规则是指在多个事务方法相互调用的情况下,事务应该如何进行传播和管理。属性用于指定事务的传播行为,它决定了当前方法执行时,如何处理已经存在的事务。属性用于指定事务的隔离级别,它决定了当前事务与其他事务之间的隔离程度。事务的创建也是有一定的规则,对于一个方法里已经存在的事务,支持当前事务,如果当前没有事务,就以非事务来执行。以非事务执行操作,如果当前存在事务,则当前事务挂。新建事务,如果当前存在事务,就把当前事务挂起。 阅读详情

@Transactional使用:

Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式:

  • 编程式事务:允许用户在代码中精确定义事务的边界。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
  • 声明式事务:
    基于AOP,有助于用户将操作与事务规则进行解耦。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务管理也有两种常用的方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional注解的方式。显然基于注解的方式更简单易用,更清爽。@Transactional注解的使用也是我们本文着重要理解的部分。

显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。
@Transactional介绍:
@Transactional注解 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
虽然@Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional注解应该只被应用到 public 方法上,这是由Spring AOP的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。
@Transactional注解属性:
@Transactional注解里面的各个属性和咱们在上面讲的事务属性里面是一一对应的。用来设置事务的传播行为、隔离规则、回滚规则、事务超时、是否只读。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {

    /**
     * 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
     */
    @AliasFor("transactionManager")
    String value() default "";

    /**
     * 同上。
     */
    @AliasFor("value")
    String transactionManager() default "";

    /**
     * 事务的传播行为,默认值为 REQUIRED。
     */
    Propagation propagation() default Propagation.REQUIRED;

    /**
     * 事务的隔离规则,默认值采用 DEFAULT。
     */
    Isolation isolation() default Isolation.DEFAULT;

    /**
     * 事务超时时间。
     */
    int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;

    /**
     * 是否只读事务
     */
    boolean readOnly() default false;

    /**
     * 用于指定能够触发事务回滚的异常类型。
     */
    Class<? extends Throwable>[] rollbackFor() default {};

    /**
     * 同上,指定类名。
     */
    String[] rollbackForClassName() default {};

    /**
     * 用于指定不会触发事务回滚的异常类型
     */
    Class<? extends Throwable>[] noRollbackFor() default {};

    /**
     * 同上,指定类名
     */
    String[] noRollbackForClassName() default {};

}
【@Transactional和@Async】填坑日记 讲述了@Transtctional @Async执行,本篇则详细讲述两者互存的各种场景及其使用注意事项 阅读详情

相关推荐

MATLAB PDE工具箱电磁场仿真平行电容板及电偶极子详解

首先打开matlab,在命令行输入pdetool打开PDE工具箱 工具箱的功能我就不赘述了,大概就是以有限元的数值计算方法,计算二阶偏微分方程,因此可以解决电磁场、热力学等问题。 首先点击左上角按钮,画三个矩形 画完一个后可以双击矩形编辑,参数如下: 其中R1表示上极板,R2表示下极板,R3表示整个空间区域。 在上方Set formula为R3-R2-R1,表示求解区域是整个空间区域减去两个极板。下拉框选择Electrostatics表示求解的是静电场问题。 接下来点击上方菜单栏中的这个按钮,表

weixin_42845306的博客 1万+

@Transactional详解(作用、失效场景与解决方法)

@Transactional非常的好用,只需要一个注解就可以不用管事务操作了,只需要注重自己的业务代码就可以了 @Transactional也有缺点,比如你要注意上诉的几种失效情况,他有个局限性,他的最小粒度要作用在方法上,也就是说,如果想要给一部分代码块增加事务的话,那就需要把这个部分代码块单独独立出来作为一个方法。而且AOP要生成一个动态代理类,所以会慢一点 但是谁会管这些啊,好用就行了,也不是不能忍的问题,这跟他的好处根本不成正比,当然如果要使用编程式事务也可以,看个人爱好,反之小编一直在用

我认不到你的博客 3万+

深入解析Cuk、Zeta和Sepic拓扑:非隔离型开关电源的设计奥秘

本文深入解析了Cuk、Zeta和Sepic三种非隔离型开关电源拓扑的设计奥秘。它们均能实现升降压转换,但特性各异:Cuk拓扑输出反向电压,输入输出纹波极低;Sepic拓扑输出同极性电压,应用广泛;Zeta拓扑输出纹波小,适合精密供电。文章详细对比了其电路结构、工作原理、核心公式及选型指南,帮助工程师根据输入电压范围、输出极性及纹波要求,灵活选择最合适的拓扑方案。

weixin_28308325的博客 477

@Transactional注解超详细

Transactional注解是Spring框架中用于声明式事务管理的关键注解。本文将深入探讨@Transactional注解的作用、使用方式和常见属性,并结合代码实例演示其在实际项目中的应用,以帮助读者更好地理解和使用该注解。@Transactional注解是Spring框架中用于声明式事务管理的关键注解。通过使用@Transactional注解,我们可以更加方便地管理事务,保障数据的一致性和可靠性。在实际项目中,合理使用@Transactional注解可以提高「开发效率 」和代码「可维护性 」。

Wzill 3万+

HA集群 执行 hdfs haadmin -transitionToActive 失败

最近把一个单NameNode集群变更为HA集群,过程中都很顺利,nn1和nn2两个NameNode都显示standby状态,但是把nn1或者nn2切换到active状态时就会报错抛异常。 查看master上namenode启动日志,如下: Incompatible clusterID for journal Storage Directory /home/hadoop-zero/bigdat...

qq_34727158的博客 1764

[Dify实战] 品牌舆情速览:多渠道抓取、聚类情绪、生成日报-带绑定资源

摘要: 品牌舆情监测面临多渠道信息分散、手工处理效率低的痛点。Dify舆情速览助手通过自动化流程(数据抓取→情绪聚类→日报生成)帮助快速识别热点与风险。方案核心包括: 结构化处理:按情绪(正/中/负)聚类,分级标注风险事件; 日报输出:含热点摘要、趋势分析及处置建议(动作+团队+时间窗口); 质量控制:数据去噪、黑名单过滤,结合人工复核确保合规性。 落地需明确数据源分级(如权威媒体优先)、设置情绪阈值,并建立"发现-响应-复盘"闭环机制,提升舆情应对效率。 (字数:150)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 298

@Transactional 注解

@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。 一、事务 事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。 1、编程式事务 是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强。 编程式事务方式需要开发者在代码中手动的管理事务

csdnlaiyanqi的博客 5万+

【图像超分】论文精读:Enhanced Deep Residual Networks for Single Image Super-Resolution(EDSR和MDSR)

最近对超分辨率的研究随着深度卷积神经网络 (DCNN) 的发展取得了进展。特别是,残差学习技术表现出更好的性能。在本文中,我们开发了一个增强的深度超分辨率网络(EDSR),其性能超过了当前最先进的 SR 方法。我们模型的显着性能改进是由于通过删除传统残差网络中不必要的模块进行优化。当我们稳定训练过程时,通过扩展模型大小可以进一步提高性能。我们还提出了一种新的多尺度深度超分辨率系统(MDSR)和训练方法,该方法可以在单个模型中重建不同缩放因子的高分辨率图像。所提出的方法在基准数据集上比最先进的方法表现出更好的

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7925

@Transactional

1、@Transactional介绍 1)@Transactional注解可以作用在接口、类、类方法。 作用于类:当把@Transactional 注解放在类上时,表示所有该类的public方法都配置相同的事务属性信息。 作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。 作用于接口:不推荐这种使用方法,因为一旦标注在Interface上并且配置了Spring AOP 使用CGLib动态代理,将会导致@Transact..

小晶 2715

MATLAB离线附加功能包下载与安装教程

本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。

加斯顿工程师的博客 1万+

Vue - 简约大气 404 页面

效果图 实现代码 复制即可。 <template> <div> <div class="error"> <!-- 图片可保存到本地 --> <img src="https://img-blog.csdnimg.cn/20210715111039922.png"> <p>抱歉!你访问的页面不存在或已删除 :( </p> <span class="back" @click="go(

🏆 前端领域优质创作者 3371

Spring中声明式事务的注解@Transactional的参数的总结(REQUIRED和REQUIRES_NEW的与主方法的回滚问题)

一、事务的传播行为 1.介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行。 2.属性 事务的传播行为可以由传播属性指定。Spring定义了7种类传播行为。 系统默认的是REQUIRED属性。 常用的是REQUIRED和REQUIRES_NEW,所以此处只说明这两种属性。 下

gpf951101的博客 2万+

【Network Management】DCM模块唤醒网络是主动唤醒还是被动唤醒

DCM模块唤醒网络是主动唤醒还是被动唤醒

qq_36056498的博客 1539

Spring @Transactional 教程

如果传播行为被设置为 NOT_SUPPORTED (以非事务方式运行,若有事务则挂起)、NEVER (以非事务方式运行,若有事务则抛异常) 或 SUPPORTS (有事务就加入,没事务就算了),在外部没有事务的情况下,这些方法本身是不会主动开启事务的。在事务拦截器的源码中,会检查方法是否为 public,如果不是,则直接跳过,不会应用事务增强。如果外部已有事务,会将其挂起。:代理对象就像一个“保安”,它会在调用真实方法前执行“前置操作”(开启事务),在调用真实方法后执行“后置操作”(提交或回滚事务)。

m0_73843492的博客 1178

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

@Transactional注解学习

接口。

qq_37080455的博客 1031

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring 中 @Transactional 注解的用法

注解的方法,Spring 会忽略事务配置,方法不会参与事务管理。要确保事务的有效性,应该确保调用的事务方法是在事务上下文中执行的。如果抛出异常,事务会回滚。的方法时,Spring 会自动启动一个事务,并在方法执行成功时提交事务,执行过程中出现异常时回滚事务。Spring 提供了对事务的全面管理,允许开发者通过注解来配置事务的行为,而不需要手动编写事务管理代码。类中的所有方法都将自动开启事务,并且如果其中任何方法抛出异常,所有数据库操作都会回滚。注解的方法,默认情况下,外部方法的事务会传播到内部方法。

秋元的博客 1635

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

@Transactional知识总结

Transactional知识总结

呼叫冰河谷博客 349

TransactionTemplate 与@Transactional 注解的使用

‌和是Spring框架中实现事务管理的两种主要方式,各有其特点和适用场景。

askuld的博客 2216

@Transactional详解

详细拆解@Transactional注解的使用和原理,以及事务失效的场景和原因

weixin_63267854的博客 3159

@Transactional的使用

1.Spring事务的原理 Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件中做相关的事务规则声明,另一种是基于@Transactional 注解的方式。 使用@Transactional的相比传统的我们需要手动开启事务,然后提交事务来说。它提供如下方便 根据你的配置,设置是否自动开启事务 自

过往很淡的博客 2016

为什么JPA@Modifying需要@Transactional注解

为什么JPA@Modifying需要@Transactional注解 在JPA开发中遇到一个很奇怪的问题,@Modifying需要和@Transactional配合使用才能正常使用。如下面代码所示 @Modifying @Transactional @Query("delete from User u where u.act...

梓鸿 549

为啥@Transactional失效了?

分享一下对Spring@Transactional的理解

u011964735的博客 1761

@Transactional 详解

事务传播机制就是: 多个事务⽅法存在调⽤关系时,事务是如何在这些⽅法间进⾏传播的.比如有两个⽅法A,B都被 @Transactional 修饰,A⽅法调⽤B⽅法A⽅法运⾏时,会开启⼀个事务.当A调⽤B时,B⽅法本⾝也有事务,此时B⽅法运⾏时,是加⼊A的事务,还是创建⼀个新的事务呢?这个就涉及到了事务的传播机制.⽐如公司流程管理执⾏任务之前,需要先写执⾏⽂档,任务执⾏结束,再写总结汇报此时A部⻔有⼀项⼯作,需要B部⻔的⽀援,此时B部⻔是直接使⽤A部⻔的⽂档,还是新建⼀个⽂档呢?

mr_yuanshen的博客 1004

使用@Transactional

Spring 还允许将事务配置放在Java类中定义,这需要借助于@Transactional注解,该注解既可用于修饰Spring Bean类,也可用于修饰Bean类中的某个方法。 使用@Transactional修饰Bean类,表明这些事务设置对整个Bean类起作用; 使用@Transactional修饰Bean类中的某个方法,表明这些事务设置只对该方法有效。 使用@Transactiona

confirmAname的专栏 1216

@Transactional失效场景介绍

第一种 Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用。例如以下代码。 定义一个错误的@Transactional标注实现,修饰一个默认访问符的方法 @Component public class TestServiceImpl { @Resource TestMapper testMapper; @Transactional void insertTestWrongModifier() {

myroncham的博客 366

Spring 事务@Transactional

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

qq_35215728的博客 888
上一篇: @Service注解的详细简介
下一篇: 关于idea新建子目录时往父目录名字后叠加而不是树形结构的解决方法
JavaPorter
博客等级 码龄7年 10粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值