Spring的嵌入式H2数据源和DB_CLOSE_ON_EXIT

2022-09-01 02:03:25

对于单元测试(如果需要,可以称之为集成测试),我已经在我的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]

现在,异常中包含的提示通常很好,但是如何将此属性添加到嵌入数据源?我是否必须扩展它,手动配置它,可以这么说,以添加这样的“高级”功能?


答案 1

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

答案 2

我遇到了与迈克尔·皮菲尔(Michael Piefel)相同的问题,并试图实施Michail Nikolaev解释的解决方案。但它不起作用,不知何故,弹簧批处理,那么,元数据JOB_*表在哪里。因此,由于我的应用程序使用的版本是3.0.5,并且增加与(我在我的应用程序中使用它)冲突的版本,因此它是基于spring和.我下载了该版本,并从中获取了默认情况下谁拥有并替换为它在war文件中的发布和部署版本,并且它的工作原理,关闭并没有引起内存中数据库的关闭。spring-jdbcspring-frameworkdwrgeodwrgmaps apispring-jdbc 4.0.3H2EmbeddedDatabaseConfigurer.classDB_CLOSE_ON_EXIT=FALSEspring-jdbc 3.0.5VM

希望这个不寻常的解决方案在像我这样的其他人无法实现其他解决方案时有所帮助。


推荐