@Transactional的七种事务传播行为

@Transactional

  • REQUIRED (默认事务)

    • 支持当前事务;如果当前没有事务,则新建一个事物
    • 在这里插入图片描述
  • REQUIRES_NEW (a事务失败了不会影响b事务的执行)

    • 新建事务;如果当前存在事务,则把当前事务挂起
    • 在这里插入图片描述
  • SUPPORTS

    • 支持当前事务,如果不存在则以非事务方式执行。
    • 在这里插入图片描述
  • MANDATORY

    • 支持当前事务,如果不存在则抛出异常(IllegalTransactionStateException)。 类似于同名的 EJB 事务属性
    • 在这里插入图片描述
  • NOT_SUPPORTED

    • 以非事务方式执行,如果存在则暂停当前事务,不支持当前事务,而是始终以非事务的方式执行
    • 在这里插入图片描述
  • NEVER

    • 以非事务方式执行,如果存在事务则抛出异常(IllegalTransactionStateException)
    • 在这里插入图片描述
  • NESTED

    • 如果当前存在事务,则对该传播行为修饰的方法回依然使用当前事务
    • 在这里插入图片描述
Java,使用@Transactional注解可以将一段代码标记为一个事务。当使用@Transactional注解时,事务的提交和回滚通常是由底层的事务管理器自动处理的,而不需要手动提交。 然而,如果你希望在使用@Transactional注解的方法手动提交事务,你可以通过以下步骤来实现: 1. 确保你的项目已经配置了事务管理器。通常情况下,Spring框架会提供一个事务管理器(例如DataSourceTransactionManager),你需要将其配置在你的应用程序上下文。 2. 在需要手动提交事务的方法上添加@Transactional注解。 3. 在方法的实现,获取事务对象,并调用其commit()方法来手动提交事务。可以使用Spring的TransactionTemplate或者直接使用底层的事务管理器来获取事务对象。 以下是一个示例代码: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Service; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; @Service public class MyService { @Autowired private DataSourceTransactionManager transactionManager; @Transactional public void myMethod() { // 业务逻辑 // 获取事务对象 TransactionStatus transactionStatus = transactionManager.getTransaction(null); try { // 手动提交事务 transactionManager.commit(transactionStatus); } catch (Exception e) { // 处理异常并回滚事务 transactionManager.rollback(transactionStatus); throw e; } } } ``` 在上面的示例,@Transactional注解标记了myMethod()方法,表示该方法是一个事务。在方法的实现,我们首先通过transactionManager.getTransaction(null)方法获取事务对象。然后,在try-catch块,我们可以根据业务逻辑的需要,手动提交事务或者回滚事务。如果出现异常,我们在catch块调用transactionManager.rollback(transactionStatus)来回滚事务。 请注意,手动提交事务可能会破坏Spring框架对事务的一些自动化处理,因此在使用@Transactional注解时,通常不需要手动提交事务。只有在特殊情况下才需要手动提交事务,例如需要在事务执行一些非标准的操作或者与外部资源进行交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

现实理想主义中的猿猴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值