2013-03-25 409 views
25

單元測試(打電話給他們的集成測試,如果你想)我在Spring配置配置的嵌入式數據庫,像這樣:Spring的嵌入式H2數據源和DB_CLOSE_ON_EXIT

<jdbc:embedded-database id="dataSource" type="H2"> 
    <jdbc:script location="classpath:schema_h2.sql" /> 
</jdbc:embedded-database> 

現在,運行該命令的測試時行,他們的工作很好,但我在最後得到一些錯誤(無害,但刺激性):

WARN 2013-03-25 12:20:22,656 [Thread-9] o.s.j.d.e.H2EmbeddedDatabaseConfigurer 'Could not shutdown embedded database' 
org.h2.jdbc.JdbcSQLException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-170] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2-1.3.170.jar:1.3.170] 
    ... 
    at org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean.destroy(EmbeddedDatabaseFactoryBean.java:65) [spring-jdbc-3.2.1.RELEASE.jar:3.2.1.RELEASE] 
    at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:238) [spring-beans-3.2.1.RELEASE.jar:3.2.1.RELEASE] 

現在包含在例外針尖一般不錯,但我怎麼這個屬性添加到嵌入式數據源?我是否必須擴展它,可以用手來配置它,來添加這樣的'高級'特性?

回答

49

在JDBC URL指定參數jdbc:h2:~/test;DB_CLOSE_ON_EXIT=FALSE

還爲內存測試數據庫,我建議你添加DB_CLOSE_DELAY=-1,像這樣:

jdbc:h2:mem:alm;MODE=Oracle;DB_CLOSE_DELAY=-1 

爲JDBC連接URL添加到embedded-dababase將其更改爲:

<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> 
    <property name="driverClass" value="org.h2.Driver"/> 
    <property name="url" value="jdbc:h2:mem:test;MODE=Oracle;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/> 
</bean> 

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

我在H2文檔中發現了很多。你沒有說如何將它添加到''中。 – 2013-03-25 14:08:22

+0

檢查更新回答 – 2013-03-25 14:17:28

+1

太棒了,沒有SO,我會做什麼? – jeremyjjbrown 2014-09-30 17:50:15

0

我和Michael Piefel有同樣的問題,並試圖實施Michail Nikolaev ex解決方案plained。 但我沒有工作,不知何故春季批處理,然後,元數據JOB_ *表在哪裏。 所以,我的應用程序使用的版本spring-jdbc是3.0.5,增加了spring-framework一個與dwr衝突(我用它在我的應用程序),它是基於Spring,dwrgmaps api一個geo本地化進入。 我下載了spring-jdbc 4.0.3釋放,從它那裏得到誰在默認情況下具有DB_CLOSE_ON_EXIT=FALSEH2EmbeddedDatabaseConfigurer.class,並用它替換的spring-jdbc 3.0.5 RELASE一和部署它在戰爭中的文件,它的工作原理,在​​的關閉並未provoque閉幕在內存數據庫中。

希望這種不尋常的解決方案有助於如果其他人作爲我將無法實施其他解決方案。