Spring Boot测试事务已打开,但在MySQL DB中未打开

问题描述 投票:0回答:1

我正在做Spring Boot的单元测试。据我所知,它会在开始时自动打开事务并在结束时回滚。但是,我没有看到事务在数据库下打开。

以下是 Spring 应用程序的一些日志:

[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")

测试很简单,所以可能不是因为AOP代理问题。

更多信息:

  • Spring Boot 2.7.18
  • Mybatis 2.1.3
  • 六月5号
  • 光4.0.3
  • 嵌入式 Tomcat 9.0.83
  • 通过
    LazyConnectionDataSourceProxy
  • 使用多个数据源
  • DB中的所有表都是InnoDB

非常感谢!

我预计数据库必须列出一个事务并且插入的数据必须回滚。

另外,我也尝试过:

  • 更改配置方言
  • 公开类/方法
  • 关闭自动提交
  • 尝试将
    @Transactional
    添加到测试中
  • 禁用 JTA
mysql spring-boot transactions innodb mybatis
1个回答
0
投票

我已经通过降级/升级MySQL连接器的版本解决了这个问题。非常感谢各位的帮助~

现状:

  • MySQL 连接器 8.0.28

未来:

  • MySQL 连接器 8.0.33

更详细:查看8.0.28的更改,自动提交覆盖发生了更改(“某些Java框架阻止更改MySQL服务器上的自动提交值”)。不过,此更改已在 8.0.29

中再次修复
© www.soinside.com 2019 - 2024. All rights reserved.