Spring 引导:从测试/资源中的模式填充 h2 db



在我的本地计算机上,我加载了一个内存中的 h2 数据库以在安全的环境中启动我的 Spring 启动应用程序,以下是属性:

spring.datasource.url: jdbc:h2:mem:DB_TEST;Mode=Oracle
spring.datasource.platform: h2
spring.jpa.hibernate.ddl-auto: none
spring.datasource.continue-on-error: false
spring.jpa.database-platform: org.hibernate.dialect.Oracle10gDialect

然后,在我的 src/main/resources 中,我有包含本地数据库启动的文件 schema-h2.sql。

这很好,但是我也有一些我想执行的junit测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {
@Autowired
private MyController controller;
@Test
public void myTest(){
controller.doSomething();
}

这也很好,因为可以看到模式-h2.sql。

无论如何,根据我的说法,最好将 schema-h2.sql 放在 src/test/resources 中,因为它只能在我的本地环境中使用。这样做还允许 maven 将其从最终构建中排除,这也很好。

无论如何,如果我把它放在那里,测试会继续工作......但是主应用程序中断,因为找不到模式 H2.sql!

如何修改上述属性以指定必须在测试/资源文件夹内搜索 shema-h2.sql?

谢谢

对于正常模式,属性文件放在 src/main/resources 中, 对于测试方法,src/test/resources 文件夹中的属性文件。

通过尝试运行测试类,eclipse 运行每个以 .sql 结尾的文件(因此包含用于创建表或插入数据的脚本(它在 src/main/resources 和 src/test/resources 下找到。 因此,如果您在两个文件夹中放置脚本文件模式.sql(包含创建表的脚本:创建表..(,则会出现"表已退出"错误,如果让一个,测试将顺利运行。 如果在两个文件夹中放置一个脚本文件(在表中插入数据(,则两个脚本都将运行。

您还可以使用存储库中的@PropertySource("..")来告诉 spring 在哪里可以找到要使用的属性文件。

最新更新