所以,我有一个用@DataJpaTest
和注释的测试@RunWith(SpringRunner.class)
,以及/ src / test / resources下的application.yml这个块(是的,缩进应该没问题):
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'
特别是: Starting embedded database: 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使用嵌入式内存数据库(替换任何显式或通常自动配置的数据源)。@AutoConfigureTestDatabase批注可用于覆盖这些设置。
因此,使用@DataJpaTest进行注释@AutoConfigureTestDatabase
,会导致TestDatabaseAutoConfiguration
使用硬编码创建嵌入式数据源generateUniqueName(true)
:
TestDatabaseAutoConfiguration.java:
EmbeddedDatabase getEmbeddedDatabase() {
...
return new EmbeddedDatabaseBuilder()
.generateUniqueName(true)
.setType(connection.getType())
.build();
}
我认为他们这样做是为了防止数据库名称冲突和测试运行之间的状态混合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句