使用H2数据库配置的Spring测试

16

我在生产环境中使用Oracle数据库,我想在测试中使用H2数据库。我可以键入:

<jdbc:embedded-database id="dataSource">
  <jdbc:script location="classpath:schema.sql"/>
  <jdbc:script location="classpath:test-data.sql"/>
</jdbc:embedded-database>

我的表格和脚本是自动生成的。但我无法设定这个数据库的URL值。(为了H2-Oracle兼容性,我应该在URL部分加入; MODE=Oracle)

有没有办法实现这个目标?

或者一个相反的解决方案;

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.h2.Driver"/>
    <property name="url" value="jdbc:h2:file:h2\db"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>        
</bean>
在这段时间里,我可以编辑URL部分,但是如何将默认的测试脚本(创建和数据SQL)加载到这个数据源中呢?
2个回答

23

这种技术解决了问题;

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
</bean>

然后添加这个标签和定义;

<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
    <jdbc:script location="classpath:testdb/schema.sql" />
    <jdbc:script location="classpath:testdb/data.sql" />
</jdbc:initialize-database>

这些文件的内容是什么?schema.sql和data.sql,它们是否包含必须设置的内容? - wlk
嗨Wojtek,是的,我需要一些初始测试数据。其中包括许多服务器的IP地址、一些用户角色、城市名称等内容。 - asyard

13

也许这会有所帮助:H2支持一个INIT脚本(在打开连接时执行的SQL脚本)。 在XML文件中,数据库URL将如下所示:

<property name="url" value="jdbc:h2:file:h2\db;INIT=
RUNSCRIPT FROM 'classpath:schema.sql'\;
RUNSCRIPT FROM 'classpath:test-data.sql'"/>

(需要用反斜杠转义;).


谢谢您的回复,我的最佳选择是使用Spring提供的方法(jdbc:initialize-database等),而不是通过添加值来扩展URL。 这种技术也很有帮助。谢谢。 - asyard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接