いくつかの単体テストを実行していますが、使用後に接続がプールに解放されないという奇妙な動作が見られます (テスト数がプール サイズに達すると、必然的に単体テストがハングします)。
実証するために、私は非常に単純な単体テストを作成しました。
@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 回目のテスト後に無期限にハングします。
接続が返されない理由を誰かアドバイスできますか?
ありがとう。