クラスに 2 つのメソッドを追加します。
public static void open() throws SomeException;
public static void close() throws SomeException;
呼び出しコードは次のようになります{
try {
DBConnection.open();
... code to use the connection one or more times ...
} finally {
DBConnection.close();
}
その中にすべてのデータベース呼び出しをラップすると、例外がスローされたかどうかに関係なく、閉じられます。
もちろん、これは私がお勧めする通常のクラスと大差ありません。
try {
DBConnection conn = new DBConnection();
conn.open();
... all the code to use the database (but you pass 'conn' around) ...
} finally {
conn.close();
}
を見て、 java.lang.AutoCloseable
それ java.io.Closeable
が役立つかどうかを確認することもできます。
2
ページがロードされても開いたままにしておくと、何かを置く場所がないtry ... finally
ため、サーブレットが閉じたり、サーバーが閉じたりするときに開いたり閉じたりできます。
開いたままにする場合は、見ていないときに閉じないことを確認するコードを追加する必要があります。たとえば、短いネットワーク障害により、ネットワークが閉じられる可能性があります。その場合、閉じたときに再度開く必要があります。そうしないと、その時点からのすべてのデータベース アクセスが失敗します。
データベース プールの概念を調べることができます。Apache には DBCP があります。Tomcat には独自の機能があり、非常に優れています。JBOSS、WebSphere、WebLogic などの他のコンテナにはすべてそれらがあります。Spring Framework で使用できるものがいくつかあります。それが行うことは、1 つ以上のデータベース接続を管理することです。あなたのコードはそれを要求し、何も利用できない場合を除き、開いているものを返し、それを開いて返します。コードがそれを通過したときに呼び出しclose
ますが、実際には接続を閉じず、プールに返すだけです。
通常は、シャットダウンされた接続を確認し、必要に応じて再開するようにプールを構成できます。