gpt4 book ai didi

java - 交易开始时的监听器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:28 25 4
gpt4 key购买 nike

我正在寻找一个干净的解决方案来让事务开始时有一个监听器。这意味着我希望监听器是 spring 上下文中的一个 bean(组件),它会在新事务开始时从 TransactionPlatformManager 或 Hibernate Session 或类似的东西接收事务启动事件。

一些东西:

@Component
class TransactionListener implements ?? {

@Autowired
private Something x;

public void onTransactionBegin(...) {
x.doSomething()
}

}

具体来说,我正在缓解一个系统范围的问题,我需要在事务开始时设置一个本地线程,这样我就可以在处理 hibernate 实体时进一步访问该本地线程以检索信息。

我调查了来源,没有发现可以实现此类监听器的踪迹。我找到的唯一解决方案是继承 HibernateTransactionManager 及其 doBegin() 方法,我觉得这不是特别好。

最佳答案

Spring 在其 TransactionSynchronization 中有一些事务回调,但是正如您正确地注意到的那样,交易开始时没有回调,这是我的错误。

据我所知,Spring 不会让您知道事务何时开始,尽管这可能因不同的实现 PlatformTransactionManager 而异。如果你想hook到Spring事务中,相信你还剩下

  1. 子类化事务管理器并调用一些回调
  2. 使用 spring-aop 为 @Transactional 创建一个建议(这显然只有在使用注释时才有效)

如果您使用的是 Hibernate,您可能会在 https://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Interceptor.html#afterTransactionBegin(org.hibernate.Transaction) 中使用 afterTransactionBegin 获得一些运气。

关于java - 交易开始时的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com