6

使用 H2 数据库 1.3.169 测试 java 应用程序

我正在以两种不同的方式测试我的应用程序。

  1. 内存数据库是在与应用程序不同的进程中创建的。我启动 H2 控制台并从脚本创建数据库。所有测试通过。
  2. 内存数据库是在应用程序启动时与应用程序在同一进程中创建的。所有测试都在 Intellij IDEA 11.3 中通过。使用 Maven 2 测试一些测试失败(为一个实体创建、更新、删除,预期的数据集与结果不匹配)。似乎数据库没有更新。它不会每次都发生,有时构建会成功。所有测试都经过验证,所有测试都适用于 Oracle 和 DB2。

问题的原因可能是什么?

4

2 回答 2

2

当您默认配置与内存中 H2 DB 的连接时,会发生这种情况,例如:dbc:h2:mem:test

在这种情况下,DB 存在,直到他至少有一个活动连接。当最后一个连接关闭时,数据库也关闭了。取决于您使用/重用连接(可能是池)和运行测试延迟,您可以获得赛车条件并获得意想不到的结果。

它可以通过连接参数来修复DB_CLOSE_DELAY=-1,这意味着只有在 VM 死亡时才关闭数据库。

这是帮助链接http://www.h2database.com/html/features.html#closure_a_database

于 2012-12-27T09:16:42.907 回答
0

我知道现在回答你的问题为时已晚。可能这可能会有所帮助。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="org.h2.Driver" />
  <property name="url" value="jdbc:h2:mem:testdb;INIT=create schema if not exists test\;runscript from 'classpath:scripts/sample.sql';**DB_CLOSE_DELAY=-1**"/>

除了它尝试添加以下属性

<prop key="hibernate.hbm2ddl.auto">create</prop>      
<prop key="hibernate.connection.release_mode">auto</prop>

这将在每次服务器启动时创建模式,并在完成后删除。

于 2016-11-09T12:09:54.107 回答