@Transactional 注解参数详解,以及注解的使用特性说明(典藏版)

原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重。

前言

通过本篇学习,你将加深对 @Transactional 注解以及所有的属性的理解,还可以学习到 @Transactional 注解常见的失效场景【文章最后】。

@Transactional 注解特性如下:

  1. @Target({ElementType.TYPE, ElementType.METHOD}):设定注解使用范围是类和方法上;
  2. @Retention(RetentionPolicy.RUNTIME):设定生命周期为全周期,支持使用反射机制的代码读取和使用;
  3. @Inherited:指明如果该注解修饰的父类被子类继承,那么子类也具备事务特性;
  4. @Documented:表明这个注解应该被 javadoc工具记录。

对@Target、@Retention、@Inherited、@Documented 注解含义的理解,请请看我另一篇博文Java注解Target、Retention、Inherited、Documented的作用简述,以@Transactional注解为例(处女座总结)

@Transactional 注解常见的失效场景与分析,请请看我另一篇博文@Transactional 注解的失效场景,这个问题见过太多的人栽跟头,一篇刨根问底,让面试官都闭嘴


一、参数详解

@Transactional 注解的关键属性大致有九个(如图):

参数 意义
isolation 事务隔离级别,默认为DEFAULT
propagation 事务传播机制,默认为REQUIRED
readOnly 事务读写性,默认为false
`@Transactional`注解是Spring框架提供的一种声明式事务管理机制,用于标记那些希望参与到事务中的方法。这个注解的主要作用包括以下几个方面: 1. **开启事务**:当方法上标注了`@Transactional`,Spring会自动开始一个新的事务,除非配置了默认的隔离级别、传播行为或其他属性。 2. **隔离级别**:`isolation`属性允许设置事务的隔离级别,比如READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE,控制事务与其他事务的并发访问程度。 3. **传播行为**:`propagation`属性定义了当前方法如何处理已存在的事务。常见的值有REQUIRED(如果已有事务,则加入;若无事务,则新建)、Mandatory(必须在事务中)、Supports(支持事务但本身不在事务内)、NotSupported(不允许事务),以及NESTED(如果已有事务,则嵌套在其中)。 4. **异常管理**:如果方法中抛出异常,`@Transactional`会负责事务的回滚。如果`rollbackFor`属性指定了异常类型列表,只有这些类型的异常才会触发回滚。 5. **保存点**:`savepoint`和`rollbackToSavepoint`可用于在事务中创建和恢复保存点,这对于复杂的事务操作很有帮助。 6. **只读事务**:通过`readOnly=true`,可以标记为只读事务,数据库会优化查询计划,降低并发冲突。 7. **最终提交/回滚**:在Spring AOP中,可以通过配置`@RollbackOn`或`@CommitOn`来指定是否因特定条件而手动完成事务。 总的来说,`@Transactional`简化了事务管理,让开发者无需显式地管理开始、提交和回滚事务,提高了代码的可读性和可维护性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java Punk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值