在没有嵌入数据源配置的情况下,如何在 Spring Boot 测试期间执行`schema.sql`?

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

有一个带有 h2 数据库的 Spring Boot 应用程序,用作主数据库。还有一个

resource/schema.sql
,它在 Spring Boot 启动时加载。

但是在使用

@SpringBootTest
进行集成测试时,Spring Boot 不会加载这个 schema.sql
。相反,它需要在已经有 
h2
 数据库的情况下设置嵌入式数据库。

有没有办法在没有嵌入数据源配置的情况下执行

schema.sql

?并且对所有测试只执行一次(例如,使用 
@Sql
 为所有测试创建模式不是解决方案)?

java spring spring-boot embedded-database spring-boot-test
2个回答
7
投票

@Sql(scripts = "classpath:schema.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)

 注释您的类或方法,其中 schema.sql 位于资源文件夹中。 

如果您的测试被标记为集成测试,您需要这个。如果您正在运行单元测试或只是在启用单元测试的情况下进行编译(默认情况下),Spring Boot 将为您执行此操作。


3
投票
在属性文件中设置此项,然后将 schema.sql 重命名为 schema-test.sql

spring.datasource.platform=test



只要您的类路径中有嵌入式数据库(h2、hsqldb 或 derby),Spring Boot 就会自动为您配置嵌入式数据库

© www.soinside.com 2019 - 2024. All rights reserved.