2011-11-17 76 views
16

我在生产环境中使用Oracle,我想用H2进行测试。我可以打字;使用H2 db配置进行弹簧测试

<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部分)

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

或者只是一个相反的解决方案;在这个时候,我可以编辑URL部分,但是我怎样才能将默认测试脚本(create和data sqls)加载到这个数据源呢?

回答

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> 
+0

这些文件的内容是什么? schema.sql和data.sql,它们是否包含必须设置的内容? – wlk

+0

嗨Wojtek,是的,我需要一些初始测试数据。多个内容是多个服务器的IP地址,一些用户角色,城市名称等。 – asyard

13

也许这会有所帮助:H2支持INIT script(打开连接时执行的SQL脚本)。该数据库的URL看起来像这样的XML文件中:

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

(在;需要用反斜杠转义)。

+0

感谢您的回复,我的最佳选择是使用Spring提供的方法(jdbc:initialize-database ..等),而无需使用值扩展url。这种技术也是有帮助的。谢谢。 – asyard