如何判断我是否在Spring中处理事务?

Uwe*_*ner 11 java spring transactions spring-data-jpa

我在Spring服务中存在持久性问题.休息控制器R接收请求,并通过一些代码层以复杂的方式调用服务S. S中的服务方法声明一个事务; 这应该是第一次启动交易.但是服务的行为就像之前已经启动的事务一样,并且我的一些数据对象将成为会话的一部分(他们不能这样做).如何确定交易是否已处于活动状态?我试图注入EntityManager和/或JpaTransactionManager; 但两者似乎没有任何帮助.

如何检查我是否在交易中?

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

Myk*_*nko 21

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

您还可以使用获取当前事务的状态

TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();
Run Code Online (Sandbox Code Playgroud)

此外,对您而言,最重要的一点是启用事务记录.

log4j.logger.org.hibernate.transaction=DEBUG,R
log4j.logger.org.springframework.transaction=DEBUG,R
Run Code Online (Sandbox Code Playgroud)

  • 如果我得到 TransactionSynchronizationManager.isActualTransactionActive() = true,但 TransactionAspectSupport.currentTransactionStatus() 抛出:范围内没有事务方面管理的 TransactionStatus,该怎么办? (3认同)