MySQLへの休止状態の接続が私のデータベースを閉じていません。10秒のように10回クリックした後、MySQL Workbenchからこの接続統計を取得します(開発マシン内。私が唯一のユーザーです)。MySQLWorkbenchサーバーのステータス
私はそれらを配置しています
- C3P0と実行中(log4jからチェック、C3P0に関連する問題はなく、実行中のようです)
- 開いているセッションがあるかどうかを確認し、requestDestroyed()メソッドで閉じるServletReqestListener。
- Hibernate SessionオブジェクトはThreadLocalに保持されているため、すべてのリクエストには1つの接続しかなく、最初のクエリで開き、ServletRequestListenerで閉じます。
- セッションを開いて閉じるたびに、コード例のように「SessionOpened」と「SessionClosed」をSystem.outに出力します。リクエストごと、ページの更新ごとに、「Session Opened」が表示され、「SessionClosed」の後にそれぞれ表示されます。だから私の小さなロジックは機能します。ただし、接続は閉じられません。
私のhibernate.cfg.xml
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">officenic</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/officenic</property>
<property name="hibernate.connection.username">officenic</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- configuration pool via c3p0 -->
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">100</property> <!-- seconds -->
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.timeout">100</property> <!-- seconds -->
セッションを閉じたいときに毎回呼び出すコードブロック。
if (session == null)
return;
if (session.isOpen()) {
if (session.isDirty())
session.flush();
session.close();
System.out.println("Session closed");
}
私は何かが恋しいですか?