Spring启动:从test / resources中的模式填充h2 db

时间:2018-05-14 20:13:09

标签: spring-boot h2

在我的本地计算机上,我加载了一个内存中的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();
}

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

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

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

如何修改上述属性以指定必须在test / resources文件夹中搜索shema-h2.sql?

由于

1 个答案:

答案 0 :(得分:0)

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

通过尝试运行测试类,eclipse运行以.sql结尾的EACH文件(因此包含创建表或插入数据的脚本),它在src / main / resources和src / test / resources下找到。 因此,如果你在两个文件夹中放置一个脚本文件schema.sql(包含一个创建表的脚本:create table ..),你会得到一个“表已经退出”的错误,如果你让jut一个,测试将顺利运行​​。 如果您在两个文件夹中放置一个脚本文件(在表中插入数据),则将运行这两个脚本。

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