You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot测试事务已开启但MySQL数据库无显示问题排查

Spring Boot单元测试事务异常:日志显示事务已开启但数据库查询不到

我正在进行Spring Boot单元测试,按常规逻辑测试启动时会自动开启事务并在测试结束时回滚,但实际在数据库中无法查到已开启的事务。

应用日志片段:

[DEBUG] [AbstractPlatformTransactionManager.java]getTransaction(370) : Creating new transaction with name [...]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT

[INFO ] [TransactionContext.java]startTransaction(107) : Began transaction (1) for test context [DefaultTestContext@25bc65ab testClass...]

[DEBUG] [AbstractPlatformTransactionManager.java]processRollback(833) : Initiating transaction rollback

[INFO ] [TransactionContext.java]endTransaction(139) : Rolled back transaction for test: [DefaultTestContext@25bc65ab testClass...]

测试运行期间执行的数据库查询:

SELECT * FROM information_schema.innodb_trx;

执行后未查询到任何事务记录。

测试代码:

@MyMapperTest
public class MapperTest {

  @Autowired
  private DbMapper mapper;

  @Test
  void test() {
    mapper.insert(getDummyData());
  }
}

@MyMapperTest注解定义:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@MybatisTest(excludeAutoConfiguration = DataSourceAutoConfiguration.class)
@ComponentScan(basePackages = { ... })
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")

环境信息:

  • Spring Boot 2.7.18
  • Mybatis 2.1.3
  • Junit 5
  • Hikari 4.0.3
  • Embedded Tomcat 9.0.83
  • 使用多数据源并搭配LazyConnectionDataSourceProxy
  • 数据库所有表均为InnoDB引擎

预期结果:

数据库能查询到事务,且插入的数据会被回滚。

已尝试的操作:

  • 修改配置方言
  • 将类/方法改为public修饰
  • 关闭自动提交
  • 尝试为测试添加@Transactional注解
  • 禁用JTA

内容的提问来源于stack exchange,提问作者phuc16102001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 23:26:03