2017-01-10 7 views
2

私はそのホーム・ページが複数のajax呼び出しを起動し、DBからデータをフェッチして戻ってくるスプリング・アプリケーションを持っています。 DBはminPoolSizeを50、maxPoolSizeを100として接続プールが設定されています。jdbcTemplateは結果セットを閉じますか?

ホームページを開くと、DBとの接続が確立され、約7回のajax呼び出しが行われます。すべてが独自の接続を作成すると仮定します。今、私はページをリフレッシュするとき、私は、jdbcTemplateは、最初のアクセスからのクエリの後に接続を閉じると、予期しないように思われる(私は、DB2の監視から合計14の物理的な接続を参照してください)この場合、接続を再利用する必要がありますか?

ここで、結果セットは接続のクローズとともにjdbcTemplateによって閉じられますか?または、結果セットを明示的に閉じる必要があるので、接続を自動的に閉じることができます。開いているresultSetが接続の原因になっている可能性がありますか?接続プールの設定のためのコードをアタッチ

<dataSource jdbcDriverRef="db2-driver" jndiName="jdbc/dashDB-Development" transactional="true" type="javax.sql.DataSource"> 
<properties.db2.jcc databaseName="BLUDB" id="db2-dashDB-Development-props" password="********" portNumber="*****" serverName="*********" sslConnection="false" user="*****"/> 
<connectionManager id="db2-DashDB-Development-conMgr" maxPoolSize="100" minPoolSize="50" numConnectionsPerThreadLocal="2"/> 

私の最初の理論接続の再利用がminPoolSizeに到達したときにのみ発生しますと、その時まで、それは常に新しい物理接続を作成することでした。私はこの限界に達した後でもこの行動を見ています。私は私のページ10の時間をリフレッシュし、私は70の物理的な接続を見る。今私の唯一の疑いは、接続が何とか近づいていないと春は、それらの接続ビジーを見ているということですか?結果セットが閉じられていないなどの理由が考えられます。時間制限を超えて結果セットを閉じるのを待たずにjdbctemplateと言う方法ですか?

おかげ Manojさん

+0

接続プールは、JDBCTemplateとは別に管理されます - あなたはあなたのconnectionManagerの設定でこれを見ることができます。また、テンプレートを閉じることができます - しかし、基本的なconnectionmanagerは、他のプールユーザーが使用するために接続を開いたままにすることがあります – farrellmr

+0

私は同意し、私はそれを理解する..しかし、この時点では、それが真であれば、jdbcTemplateがクローズしていないことを意味しますか?そのプールに戻ってきた場合、refreshは新しい接続を求めるconnectionManagerの代わりにプールからそれらを再利用する必要があります。 –

+0

プールの操作を制御できないため、設定パラメータに基づいてプール戦略を割り振る最適な方法を決めることができます – farrellmr

答えて

4

あなたはorg.springframework.jdbc.core.JdbcTemplate.queryメソッドのソースコードを見れば、あなたはへの呼び出しを参照 -

finallyブロックで
JdbcUtils.closeResultSet(rs); 

は - そうそうJDBCTemplateが

コールをrs.closeありませんテンプレートはまた、プールへの接続をクローズするか、返します。

関連する問題