0

いくつかの単体テストを実行していますが、使用後に接続がプールに解放されないという奇妙な動作が見られます (テスト数がプール サイズに達すると、必然的に単体テストがハングします)。

実証するために、私は非常に単純な単体テストを作成しました。

@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 オブジェクトの close を明示的に呼び出しています。

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 に設定すると、2 回目のテスト後に無期限にハングします。

接続が返されない理由を誰かアドバイスできますか?

ありがとう。

4

1 に答える 1

0

わかりました、それはばかげた問題でした..

testclass が @Before setup メソッドを複製した別のクラスを拡張していることに私は気づいていなかったので、明らかにプールで面白いことをしていました。それを削除すると、問題は解決しました。

于 2012-11-28T18:07:48.580 に答える