Spring的嵌入式H2数据源和DB_CLOSE_ON_EXIT(Spring’s embedded

2019-08-17 23:47发布

单元测试(打电话给他们的集成测试,如果你想)我在Spring配置配置的嵌入式数据库,如下所示:

<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]

现在包含在例外针尖一般不错,但我怎么这个属性添加到嵌入式数据源? 我必须将其展开,由专人将其配置可以这么说,增加这样的“高级”功能?

Answer 1:

指定JDBC URL参数JDBC:H 2:〜/测试; 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>


Answer 2:

我有同样的问题,因为迈克尔Piefel的一个,并试图实现一个米凯尔尼古拉耶夫解释了解决方案。 但它没有工作,莫名其妙地弹簧批,那么,到哪里都是在元数据JOB_ *数据表都是。 所以,作为版本spring-jdbc通过我的应用程序使用的是3.0.5和增加spring-framework与冲突就进入dwr (我用它在我的应用程序),它是一个geo基础上的弹簧,本地化dwrgmaps api 。 我下载了spring-jdbc 4.0.3版本,并从中获得H2EmbeddedDatabaseConfigurer.class谁拥有DB_CLOSE_ON_EXIT=FALSE默认情况下,用它替换的一个spring-jdbc 3.0.5 RELASE和部署,它在战争文件,并将其工作时,在关机VM没有provoque的收盘内存数据库。

希望这不寻常的解决方案可以帮助其他人是否为我不会将能够实现其他的解决办法。



文章来源: Spring’s embedded H2 datasource and DB_CLOSE_ON_EXIT
标签: java spring h2