Groovy SQL连接未关闭

时间:2012-11-28 17:39:47

标签: sql groovy connection datasource

我正在运行一些单元测试,但我看到一些奇怪的行为,关于连接在使用后没有被释放到池中(当测试次数达到池大小时,这不可避免地导致单元测试挂起)

为了演示,我创建了一个非常简单的单元测试:

@Before void setUp(){
    sql = new Sql(getDataSource())
    println getDataSource().getNumActive()
}

@After void tearDown(){
    sql.close()
}

@Test void test1(){
    println sql.rows("select 1")
}
@Test void test2(){
    println sql.rows("select 1")
}
@Test void test3(){
    println sql.rows("select 1")
}
@Test void test4(){
    println sql.rows("select 1")
}

在我的setup方法中,我的getDataSource()方法只返回一个静态的,初始化的BasicDataSource(所以每次都是相同的数据源)。

我也在teardown方法中显式调用了我的Sql对象,尽管Groovy在其docs中说你在使用DataSource构造你的Sql对象时不需要

public Sql(javax.sql.DataSource dataSource)
Constructs an SQL instance using the given DataSource. Each operation will use a Connection from the DataSource pool and close it when the operation is completed putting it back into the pool.

但是,当我运行测试时,活动连接的数量会继续增加,如果我将最大池大小设置为2,那么它将在第二次测试后无限期地挂起。

有人可以建议为什么不返回连接吗?

感谢。

1 个答案:

答案 0 :(得分:0)

好的,这是一个愚蠢的问题..

我没有注意到测试类正在扩展另一个在其中有重复@Before安装方法的类,所以显然在池中做了有趣的事情。删除它已解决了这个问题。