gpt4 book ai didi

spring-boot - Spring Boot 测试似乎正在创建与我预期不同的 H2 测试数据库

转载 作者:行者123 更新时间:2023-12-04 15:39:18 30 4
gpt4 key购买 nike

所以,我有一个用 @DataJpaTest@RunWith(SpringRunner.class) 注释的测试,以及/src/test/resources 下的 application.yml block (是的,缩进应该没问题):

spring:
datasource:
url: jdbc:h2:mem:foobar;MODE=Mysql;MVCC=FALSE;
username: sa
password:
driver-class-name: org.h2.Driver

当我开始测试时,我意外地在日志中得到了这些行:

2019-10-23 17:11:08.311  INFO 13468 --- [           main] beddedDataSourceBeanFactoryPostProcessor : Replacing 'dataSource' DataSource bean with embedded version
2019-10-23 17:11:08.801 INFO 13468 --- [ main] o.s.j.d.e.EmbeddedDatabaseFactory : Starting embedded database: url='jdbc:h2:mem:7855270f-61b7-4f37-8796-cbfeb8ad42ea;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'

特别是这个:启动嵌入式数据库:url='jdbc:h2:mem:7855270f-61b7-4f37-8796-cbfeb8ad42ea;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false

为什么 Spring boot 使用 UUID 生成的数据库启动数据库而不是从 spring.datasource.url 中获取设置?

“高效”应用程序从/src/main/resources 中的文件中获取数据源设置,语法相同,没有问题...

最佳答案

来自 @DataJpaTest 的文档你可以看到:

@DataJpaTest uses an embedded in-memory database (replacing any explicit or usually auto-configured DataSource). The @AutoConfigureTestDatabase annotation can be used to override these settings.

所以 @DataJpaTest 注释了 @AutoConfigureTestDatabase 导致 TestDatabaseAutoConfiguration 使用硬编码 generateUniqueName(true) 创建嵌入式数据源:

测试数据库自动配置.java:

EmbeddedDatabase getEmbeddedDatabase() {
...
return new EmbeddedDatabaseBuilder()
.generateUniqueName(true)
.setType(connection.getType())
.build();
}

我认为他们这样做是为了防止数据库名称冲突和测试运行之间的状态混合。

关于spring-boot - Spring Boot 测试似乎正在创建与我预期不同的 H2 测试数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58526235/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com