@Transactional注解介绍

本文详细介绍了Spring框架中的@Transactional注解,包括其参数(readOnly、propagation、isolation、timeout、rollbackFor等)以及它们的作用,重点讲解了propagation参数如何控制事务间的交互。
摘要由CSDN通过智能技术生成

@Transactional 注解是 Spring 框架中用于声明事务性方法的注解之一。它可以应用在方法级别或类级别,并提供了一系列参数来定义事务的属性。以下是 @Transactional 注解的常用参数:

  1. readOnly(默认值:false): 指定事务是否为只读事务。如果设置为 true,则表示这个事务只读取数据但不修改数据,可以优化事务处理性能,默认值为 false。

  2. propagation(默认值:Propagation.REQUIRED): 指定事务的传播行为。包括多种传播行为,如 REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW 等。

  3. isolation(默认值:Isolation.DEFAULT): 指定事务的隔离级别。包括多种隔离级别,如 DEFAULT、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE。

  4. timeout(默认值:-1): 指定事务的超时时间(单位为秒)。如果事务在指定的时间内没有完成,则会自动回滚。

  5. rollbackFor(默认值:{}): 指定在哪些异常情况下会触发事务回滚。可以指定一个或多个异常类。

  6. noRollbackFor(默认值:{}): 指定在哪些异常情况下不会触发事务回滚。可以指定一个或多个异常类。

  7. value(默认值:{}): 用于指定应该应用哪些事务管理器。通常情况下,Spring 会根据环境中存在的事务管理器来确定应该应用哪一个。

  8. transactionManager(默认值:“transactionManager”): 指定应该应用哪个事务管理器。如果指定了 value,则忽略该参数。

使用 @Transactional 注解时,可以通过设置这些参数来自定义事务的行为。例如,以下是一个使用 @Transactional 注解的示例:

@Transactional(readOnly = true, timeout = 60, rollbackFor = {SQLException.class, IOException.class})
public void doSomething() {
    // 执行业务逻辑
}

在这个示例中,doSomething() 方法被声明为只读事务,超时时间为 60 秒,在发生 SQLException 或 IOException 异常时触发事务回滚。

propagation参数

propagation 参数用于指定事务的传播行为,即在一个事务方法被另一个事务方法调用时,当前事务如何与调用方事务进行交互。Spring 提供了多种传播行为,通过 Propagation 枚举来表示。以下是 propagation 参数的常见取值及其含义:

  1. REQUIRED: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认的传播行为。

  2. SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。适用于对事务没有严格要求的情况。

  3. MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。表示调用方必须存在事务。

  4. REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则将当前事务挂起。即使调用方存在事务,也会创建一个新的事务。

  5. NOT_SUPPORTED: 以非事务方式执行操作,如果当前存在事务,则将当前事务挂起。

  6. NEVER: 以非事务方式执行操作,如果当前存在事务,则抛出异常。

  7. NESTED: 如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则行为类似于 REQUIRED。嵌套事务可以有自己的 savepoint,并且可以选择回滚到 savepoint 而不影响外部事务。仅支持特定的事务管理器。

通过设置 propagation 参数,可以灵活地控制事务方法之间的交互方式,确保事务的一致性和可靠性。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pineux

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

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

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

打赏作者

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

抵扣说明:

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

余额充值