有没有一种方法可以在Spring中访问当前事务?我的目标是在事务开始时添加一些信息,并在同一事务中的所有方法调用中使用该信息。
这里有一个EJB的解决方案:如何将数据附加到JTA事务?(或唯一标识它) 我正在寻找相同的Spring解决方案。
ThreadLocal
将数据附加到线程上,然后使用TransactionSynchronizationManager
清除ThreadLocal
,从而有效地创建一个事务范围的变量:TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronizationAdapter() {
@Override
public void afterCompletion() {
... clear the ThreadLocal ...
}
}
);
registerSynchronization
将TransactionSynchronizationAdapter
添加到回调列表中,在事务生命周期的不同点执行回调,本例中在提交或回滚后执行。通过在线程上存储变量并在下一次提交时清除线程变量,使变量有效地具有事务范围。 - Angular University