dbUnit的问题:java.sql.SQLException:Closed语句

dbUnit的问题:java.sql.SQLException:Closed语句,java,oracle,dbunit,Java,Oracle,Dbunit,我对dbUnit有一个奇怪的问题。 我在我的项目中使用了DBUnit2.4.4、Java1.6、Spring(作为db连接池)、Oracle9和大约50个单元测试。 对于其中一些测试(当我运行整套测试时),我会遇到这样的异常: Closed Statement [junit] junit.framework.AssertionFailedError: Closed Statement [junit] at com.myproj.DataAccess.Internal.BaseDAOTes

我对dbUnit有一个奇怪的问题。 我在我的项目中使用了DBUnit2.4.4、Java1.6、Spring(作为db连接池)、Oracle9和大约50个单元测试。 对于其中一些测试(当我运行整套测试时),我会遇到这样的异常:

Closed Statement
[junit] junit.framework.AssertionFailedError: Closed Statement
[junit]     at com.myproj.DataAccess.Internal.BaseDAOTest.importToDb(Unknown Source)
[junit]     at com.myproj.DataAccess.Internal.MyDAOTest.testGetBuyClientOrders(Unknown Source)
[junit]     at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[junit]     at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423)
[junit]     at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)
importToDb方法通过dbUnit的DatabaseOperation.REFRESH.execute方法将测试数据从XML文件加载到数据库,并在所有测试中使用。 如果我单独运行这些有问题的测试,它们就不会有问题。
你有什么想法吗?谢谢

我猜您的一些测试在清理时会关闭数据库连接。下一个测试尝试再次使用此连接进行导入,但失败。

当这发生在我身上时,我们已明确配置了连接缓存,以使用两个属性拦截长期连接:

AbandonedConnectionTimeout
InactivityTimeout

事实证明,查询+处理时间只是跳过了两个属性组合的尖峰(放弃连接超时+不活动超时<查询时间+结果集处理时间)


要解决此问题,您可以提高超时限制,也可以通过将超时设置为0(默认值)来删除超时。

我们可以查看importToDb的代码吗?在这里,我没有在任何测试中明确关闭连接。它们都使用SpringDAO库中的jdbcTemplate,所以我不需要手动操作连接。连接在导入函数中是关闭的,但此函数对于所有测试都是相同的。您使用哪个数据源?是否是
SingleConnectionDataSource
?我的Spring配置中的数据源描述: