【发布时间】:2016-09-28 11:29:40
【问题描述】:
我正在寻找一个干净的解决方案来监听事务启动。这意味着我希望侦听器成为 Spring 上下文中的 bean(组件),它会在新事务开始时从 TransactionPlatformManager 或 Hibernate Session 或类似的东西接收事务启动事件。
一些东西:
@Component
class TransactionListener implements ?? {
@Autowired
private Something x;
public void onTransactionBegin(...) {
x.doSomething()
}
}
具体来说,我正在缓解系统范围的问题,我需要在事务开始时设置一个本地线程,以便在处理休眠实体时进一步访问该本地线程以检索信息。
我查看了来源,没有发现可以实现此类侦听器的任何痕迹。我发现的唯一解决方案是继承 HibernateTransactionManager 及其 doBegin() 方法,我觉得这不是特别好。
【问题讨论】:
-
最简单的方法可能是为
PlatformTransactionManager创建一个包装器,并在 3 个方法调用上触发这些事件。但是为什么你需要注册呢?你想做什么?你提到解决问题,但这似乎有点奇怪。 -
我面临的问题无关紧要,它是由我们的大型多模块架构引起的。如果我可以选择对架构做出决定,我会采取不同的方式。但这在这个遗留架构中是不可能的,没有沉浸式重写,这就是我需要这个的原因。
标签: java spring hibernate spring-transactions hibernate-session