当前位置: 首页 > 知识库问答 >
问题:

如何确定我是否处于Spring中的事务中?

终安和
2023-03-14

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

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

我想在我通过所有这些层寻找可能的嫌疑犯之前确定这一点。

共有1个答案

周鸿光
2023-03-14

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

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

TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();

此外,对您来说,启用事务日志记录可能是一个很好的方法。

log4j.logger.org.hibernate.transaction=DEBUG
log4j.logger.org.springframework.transaction=DEBUG
 类似资料:
  • 我计划为 EJB 编写一个拦截器,它基本上可以执行以下操作: 问题是,如果em.flush()应用于用@TransactionAttribute(NOT _ SUPPORTED)或@TransactionAttribute(SUPPORTS)注释的方法(即只读方法),它会引发异常,而它在使用默认@ transaction attribute(必需)的方法(即更改数据库的方法)时工作良好。 有没有办

  • 问题内容: 我有一个容器。 假设 为什么我这样做是假的? 我认为是由于相同的原因,但我应该得到这个错误吗? 我可以以某种方式纠正它吗? TL; DR:我可以将Arraylist.contains()用于int [] 编辑: 解答(如果将来有人在此进行搜索,这是我作为解决方案编写的比较代码): 问题答案: 数组列表仅存储对数组的引用,而不存储其内容,因此只能说列表是否包含对您输入的数组的确切引用。它

  • 问题内容: 假设我有2个结构: 我想反映扩展结构来获取它的领域: 问题答案: 只需检查值的Kind()

  • 我想了解Spring Batch是如何进行事务管理的。这不是一个技术问题,而是一个概念性的问题:Spring Batch使用什么方法?这种方法的后果是什么? 让我试着澄清一下这个问题。例如,在TaskletStep中,我看到步骤执行通常如下所示: 准备步骤元数据的几个JobRepository事务 每一块要处理的业务事务 更多JobRepository事务,用区块处理的结果更新步骤元数据 这似乎是

  • 我正在用JPA在Spring中实现一个应用程序,并将其部署在weblogic服务器中。我想知道如何处理交易。对于数据库配置,我配置了persistence.xml将事务类型声明为JTA。在我的持久性逻辑中,当更新一些东西时,我使用这个逻辑: 但它抛出了一个例外。如果我不提交,数据库表中的数据就不会更新。即使我尝试在方法级别声明@Transactional,它也不起作用。有没有人能告诉我如何处理交易

  • 我试图编写一个DAO类并使用该类中的EntityManager来执行持久操作。我的数据库在我的persistence.xml中定义为jta-data-source,并相应地在我的Web应用程序服务器中注册为数据源。 因此,在我的DAO中使用EntityManager的em.persist()方法时遇到了一个问题,因为我需要一个事务。显然,它必须是一种称为UserTransaction的特殊类型的事