2011-11-17 79 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