接続リークが発生している可能性があります。巨大なプールサイズは実際にはそれを助けません。 こちら をご覧ください。 。
付録:堅牢なリソースクリーンアップイディオム
リソースを試す
を使用できる場合に最適です。 。ただし、古いバージョンのJava(Java 7より前)を使用している場合、またはAutoCloseable
を実装していないリソースを使用している場合 あなたはまだこの種のものに戻らなければならないかもしれません。
Connection c = null;
OtherResource or = null;
try
{
c = cpds.getConnection();
or = getOtherResource()
// do stuff
// ...
}
finally
{
try { if (or != null) or.close(); }
catch (Exception e) { e.printStackTrace(); }
try { if (c != null) c.close(); }
catch (Exception e) { e.printStackTrace(); }
}
Connectionが取得され、各リソースのベストアテンプトclose()が存在する場合、finally句は確実に実行されることに注意してください:or
の場合 close()に失敗しました。その例外によって、theConnectionをclose()しようとする試みが妨げられることはありません。
あなたは非常に注意しなければなりません。ケインズが有名に言っているように、カップとリップをひねるスリップがたくさんあります。