【问题标题】:When is Transaction getting committed when using @Transactional使用@Transactional 时何时提交事务
【发布时间】:2021-06-06 00:50:28
【问题描述】:

我有一个用 @Transactional 注释的 Spring Boot 服务类方法,我需要在其中 将事务提交到 MYSQL DB,然后执行 finally 代码块,将实体推送到 Redis 队列。下面是我的代码sn-p:

@Transactional
public void save(Entity t) {
    try {
         entityRepository.save(t);
    } catch(Exception ex) {
         log.error("Error while executing transaction",e);
    } finally {
        //code to push to redis
    }
}

我的疑问是事务是否会被提交,finally块是否会被执行?或者 @Transactional 只有在 finally 块完成后才会完成所有事务。如果是后者,如何确保我的事务在推送到 Redis 之前已经提交?

请指教。

注意: entityRepository 是一个扩展 CrudRepository 的类

【问题讨论】:

    标签: java mysql spring-boot spring-transactions


    【解决方案1】:

    只有在 finally 块之后才会提交事务。

    对于提到的用例,请查看:Creating a post commit when using transaction in Spring

    使用 afterCommit 或 afterCompletion 注册 TransactionSynchronization。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      相关资源
      最近更新 更多