如何确定我是否在Spring事务中?
如何确定我是否在Spring事务中?
我在 Spring 服务中遇到了一个持久性问题。一个 Rest-Controller R 收到一个请求,并通过一些代码层级通过复杂的方式调用一个服务 S。在 S 中的服务方法声明了一个事务;这应该是第一次启动事务。
但是服务的行为就像已经开始了一个事务,我的一些数据对象将成为会话的一部分(它们不应该是)。我如何确定事务是否已经处于活动状态?我尝试注入 EntityManager 和 / 或 JpaTransactionManager,但似乎两者都没什么帮助。
我怎么才能检查我是否处于事务中?
在我开始在所有这些层次中寻找可能的嫌疑人之前,我想要确定这一点。
admin 更改状态以发布 2023年5月23日
您可以使用TransactionSynchronizationManager.isActualTransactionActive()
来检查事务是否处于活动状态。但是,您应该在服务方法执行之前调用它。
此外,您还可以获取当前事务的状态
TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();
另外,也许一个很好的点是启用事务的日志记录。
log4j.logger.org.hibernate.transaction=DEBUG log4j.logger.org.springframework.transaction=DEBUG