拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 检测Spring事务是否处于活动状态

检测Spring事务是否处于活动状态

白鹭 - 2021-11-24 440 0 0

1.概述

检测事务对于审计目的或在未实施良好事务约定的复杂代码库中可能有用。

在这个简短的教程中,我们将介绍几种方法来检测代码中的Spring事务。

2.事务配置

为了使事务在Spring中工作,必须启用事务管理。如果我们使用带有spring-data- *或spring-tx依赖项的Spring Boot项目,则默认情况下,Spring将启用事务管理。否则,我们将必须启用事务并显式提供事务管理器。

首先,我们需要在@Configuration类中@EnableTransactionManagement批注。这将为我们的项目启用Spring的注释驱动的事务管理。

接下来,我们必须提供PlatformTransactionManagerReactiveTransactionManager bean。这个bean需要一个DataSource 。我们可以选择使用许多常见的库,例如H2或MySQL的库。对于本教程,我们的实现无关紧要。

一旦启用事务,就可以使用@Transactional批注来生成事务。

3.使用TransactionSynchronizationManager

Spring提供了一个名为TransactionSychronizationManager的类。值得庆幸的是,此类具有一个静态方法,该方法使我们可以知道我们是否处于事务中,称为isActualTransactionActive()

为了测试这一点,让我们用@Transactional注释测试方法。我们可以断言isActualTransactionActive()返回true

@Test

 @Transactional

 public void givenTransactional_whenCheckingForActiveTransaction_thenReceiveTrue() {

 assertTrue(TransactionSynchronizationManager.isActualTransactionActive());

 }

同样,测试应断言@Transactional批注时,将返回false

@Test

 public void givenNoTransactional_whenCheckingForActiveTransaction_thenReceiveFalse() {

 assertFalse(TransactionSynchronizationManager.isActualTransactionActive());

 }

4.使用Spring事务日志

也许我们不需要以编程方式检测交易。如果我们只希望在应用程序的日志中看到事务何时发生,则可以在属性文件中启用Spring的事务日志

logging.level.org.springframework.transaction.interceptor = TRACE

一旦启用该日志记录级别,事务日志就会开始出现:

2020-10-02 14:45:07,162 TRACE - Getting transaction for [com.Class.method]

 2020-10-02 14:45:07,273 TRACE - Completing transaction for [com.Class.method]

没有任何上下文,这些日志将不会提供非常有用的信息。我们可以简单地添加一些自己的日志记录,并且应该可以轻松地在Spring管理的代码中看到事务发生的位置。

5.结论

在本文中,我们看到了如何检查Spring事务是否处于活动状态。我们学习了如何使用TransactionSynchronizationManager.isActualTransactionActive()方法以编程方式检测事务。我们还发现了如何启用Spring的内部事务日志记录,以防我们希望在日志中看到事务。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *