当前位置: 首页 > 面试题库 >

在Spring中使用事务时创建后提交

欧阳玺
2023-03-14
问题内容

由于某些原因,我已经使用Spring
PlatformTransactionManager手动执行了事务提交和回滚操作,我需要做的是设置一个钩子,以便在事务提交后执行后提交操作。

通过查看:

 void commit(TransactionStatus status) throws TransactionException;

我没有看到我能确定交易是否成功,除了假设它没有假想。

而且我可以将AOP作为一种选择,但是以编程方式进行操作,也许使用回调方法呢?


问题答案:

你可以得到你想要什么以更简单的方式,TransactionSynchronizationManagerTransactionSynchronization

使用TransactionSynchronizationManager,您可以使用静态方法来获取有关当前交易的信息,并且可以注册一个TransactionSynchronization夹点,以便在调用时自动进行提交后

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization(){
           void afterCommit(){
                //do what you want to do after commit
           }
})

请注意,TransactionSynchronization是基于每个线程的(对于基本的Web请求通常不是问题)。



 类似资料:
  • 这意味着没有为内部 我找不出这里出了什么问题?非常感谢任何帮助。

  • 我使用的是Spring-Kafka2.2.2.release(org.apache.kafka:kafka-clients:jar:2.0.1)和spring-boot(2.1.1)。我无法执行事务,因为我的侦听器无法获得分配的分区。我只为一个消费者创建了建议的配置。我正在尝试配置一个事务性侦听器容器,并且只处理一次 我使用事务管理器配置了生产者和使用者,生产者使用事务id,使用者使用isolat

  • 问题内容: 这篇文章是JPA的延续。如何在持久化后从数据库获取值 当我执行以下命令时,我将遵循以下异常,该如何解决呢? DAOImpl 代码 applicationContext.xml 问题答案: 我猜这里的问题是,尽管您已经为事务管理器定义了bean,但是您没有注释启用弹簧事务的create()方法。 还要删除该语句,因为现在所有事务管理都将在spring之前完成,如果您保留该语句不变,则将再

  • 问题内容: 事务成功或回滚后,我需要调用某些方法。我正在使用 该应用程序使用一些外部Web服务,这些内部Web服务在回滚内部事务时需要“清除”。有没有办法在不使用声明式事务管理的情况下完成此操作。 问题答案: 在Hibernate中,您可以扩展和覆盖 方法并将其注册在 或中。 在Spring中,您可以使用扩展,覆盖和注册 。 编辑 使用Spring Aop向所有带注释的方法添加同步的示例

  • 我有一个服务层类,它有annotation@Controller和我在线程中生成的服务调用,它正在更新数据库中的某些内容。我在thread的方法中使用了@transaction注释。但我遇到了hibernate异常“找不到会话”。我需要为线程添加任何注释吗? lient.runHibernateException:在lient.java:222没有找到当前线程的Session 4. SpringS