gpt4 book ai didi

java - Spring 的嵌入式 H2 数据源和 DB_CLOSE_ON_EXIT

转载 作者:IT老高 更新时间:2023-10-28 13:05:31 25 4
gpt4 key购买 nike

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

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

最佳答案

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

关于java - Spring 的嵌入式 H2 数据源和 DB_CLOSE_ON_EXIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15613722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com