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
相关产品推荐
相关产品推荐

