MySQLデータベースに接続してすぐに終了し、その後しばらくスリープして終了するJavaプログラムを作成しました。close()の後にMySQL接続が残っています(薄いラッパーで)
Connection conn = DriverManager.getConnection(conn_str);
conn.close();
Thread.sleep(30 * 1000);
上記のコードはかなりうまく動作します。 connは、close()を呼び出した直後に閉じられ、sleep()中には接続が表示されません。その後
、私は薄い接続ラッパーを書いた:
public static Connection CreateConnection(String _connectionStr) throws SQLException {
Connection c = null;
c = DriverManager.getConnection(_connectionStr);
return c;
}
修正されたコードである:
Connection conn = ConnectionWrapper.CreateConnection(conn_str);
conn.close();
Thread.sleep(30 * 1000);
Iは、これら2つの差異を有していない期待し、後者の場合で、接続が持っていましたプログラムが終了するまで(ここでは30秒)閉鎖されたままである。前者のコードではこれは起こりません。
Threads_connected
の値を見て、動作をmysqladmin extend-status | grep connected
と確認しました。
コード抽象化のために後者のラッパーを使用したいと思います。強制的に接続を閉じる動作や回避策があるかどうか教えてください。
おかげで、
- 編集
は: "ラッパー" のコードを修正しました。それは私の間違いでした。
編集:mysqladminからの接続数は、デフォルトでは1(診断1)です。後者のコードが実行されている間は2になり、前者のコードでは2になります。
ラッパーを作成していません。接続を取得するために呼び出すメソッドを作成しました(Java命名規約を尊重することは怠っています)。両方のコードスニペットは厳密に等価です。診断が間違っている可能性があります。 –
実際にメソッド 'CreateConnection(ConnectionType、String)'を直接呼び出しているわけではありません。おそらく 'CreateConnection(String)'メソッドで何か別のことをしていますか? –
私は両方が同等だと信じていましたが、異なる行動をしています。よくわかりません。 –