如何确定我是否在Spring事务中?

7 浏览
0 Comments

如何确定我是否在Spring事务中?

我在 Spring 服务中遇到了一个持久性问题。一个 Rest-Controller R 收到一个请求,并通过一些代码层级通过复杂的方式调用一个服务 S。在 S 中的服务方法声明了一个事务;这应该是第一次启动事务。

但是服务的行为就像已经开始了一个事务,我的一些数据对象将成为会话的一部分(它们不应该是)。我如何确定事务是否已经处于活动状态?我尝试注入 EntityManager 和 / 或 JpaTransactionManager,但似乎两者都没什么帮助。

我怎么才能检查我是否处于事务中?

在我开始在所有这些层次中寻找可能的嫌疑人之前,我想要确定这一点。

admin 更改状态以发布 2023年5月23日
0
0 Comments

你可以使用

org.springframework.transaction.support.TransactionSynchronizationManager#isActualTransactionActive

0
0 Comments

您可以使用TransactionSynchronizationManager.isActualTransactionActive()来检查事务是否处于活动状态。但是,您应该在服务方法执行之前调用它。

此外,您还可以获取当前事务的状态

TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();

另外,也许一个很好的点是启用事务的日志记录。

log4j.logger.org.hibernate.transaction=DEBUG
log4j.logger.org.springframework.transaction=DEBUG

0