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 兼容性,我应该将 ;MODE=Oracle 添加到 url 部分)

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

或者只是相反的解决方案;

<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 部分,但如何将默认测试脚本(创建和数据 sqls)加载到此数据源?

4

2 回答 2

22

这种技术解决了这个问题;

<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>
于 2011-11-18T10:58:55.183 回答
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'"/>

;需要用反斜杠转义)。

于 2011-11-17T19:11:33.750 回答