2016-10-11 17 views
1

dbcp接続プーリングを使用していて、長時間実行されているストアドプロシージャを使用しています。複数の接続が開かれており、データベース(mssql)サーバーマシンの電源がオフになり、これらの接続が開かれたままになります。プーリングから開かれた接続のリストを取得し、それらをjava Webアプリケーションから手動で閉じるにはどうすればよいですか?DBCP開いている接続をすべて閉じる

InitialContext initCtx = new InitialContext(); 
      Object obj = initCtx.lookup("java:comp/env/jdbc/oscon"); 
      BasicDataSource source = (BasicDataSource) obj; 

は、私はあなたがそれらを手動で閉じる必要はありませんコモンズ - dbcp2-2.0.1.jar

答えて

1

を使用しています。もっとも良いことは、単にConnection testingを設定することです。その場合、c3p0は黙って(しかし遅れて)古い接続を閉じて新しい接続を取得します。

あなたは、それよりももっと積極的にちょうどPooldedDataSourceにキャストした後、C3P0データソースのhardReset()を(呼び出したい場合は

+0

いただきましPooledDataSource – odedravijay

+0

のInitialContextするContext initctx =新しいのInitialContext()へのBasicDataSourceをキャストする方法。?; \t \t \tオブジェクトOBJ = initCtx.lookup( "Javaの:COMP/ENV/JDBC/OSCON"); \t \t \tのBasicDataSourceソース=(のBasicDataSource)OBJ; \t \t \t PooledDataSource PDS =(P ooledDataSource)DataSources.pooledDataSource(ソース); \t \t \t pds.hardReset(); – odedravijay

+0

c3p0はBasicDataSourceを提供していません。あなたのルックアップの後、 'PooledDataSource pds =(PooledDataSource)obj;'を直接試してください。あなたがしたようにハードリセットしてください。 –

関連する問題