2017-01-10 1 views
2

Ich habe eine Feder-Anwendung, wo seine Homepage mehrere Ajax-Aufrufe feuern, die wiederum Daten aus der Datenbank abrufen und zurückgeben. Die DB wurde mit Verbindungspooling mit minPoolSize als 50 und maxPoolSize als 100 konfiguriert.schließt jdbcTemplate Ergebnismengen?

jetzt, wenn ich die Homepage öffne, werden rund 7 Verbindungen mit der DB aufgebaut, was erwartet wird, da rund 7 Ajax-Anrufe getätigt werden und ich Angenommen, alle erstellen ihre eigene Verbindung. Jetzt, wenn ich die Seite aktualisiere, sehe ich 7 weitere neue Verbindung hergestellt werden (ich sehe insgesamt 14 physische Verbindungen von db2 Überwachung), die unerwartet scheint, wie ich annehme jdbcTemplate die Verbindung nach der Abfrage vom ersten Zugriff und Aktualisierung schließen sollten Sie in diesem Fall die Verbindungen wiederverwenden?

Jetzt Frage ist hier Ergebnisse werden auch geschlossen von jdbcTemplate zusammen mit Verbindung schließen? oder Muss ich das resultSet explizit schließen, damit die Verbindung automatisch geschlossen werden kann? Geöffnetes resultSet kann ein Grund sein, dass sich die Verbindung nicht schließt? Anbringen des Code für Verbindungs-Pooling Konfiguration

<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"/> 

Meine erste Theorie war, dass die Wiederverwendung der Verbindung nur dann geschehen, wenn MinPoolSize erreicht wird und bis dahin wird es immer wieder neue physikalische Verbindung erstellen. Aber ich sehe dieses Verhalten auch, nachdem ich dieses Limit erreicht habe. Ich habe meine Seite aktualisiert und sehe 70 physische Verbindungen. Jetzt ist mein einziger Zweifel, dass die Verbindung irgendwie nicht näher kommt und der Frühling diese Verbindungen beschäftigt sieht? Dies kann daran liegen, dass Resultsets nicht geschlossen sind oder ein anderer Grund? Ist es eine Möglichkeit zu sagen, dass jdbctemplate nicht auf das Schließen der Ergebnismenge über ein Zeitlimit hinaus wartet?

Dank Manoj

+0

Der Verbindungspool wird getrennt von der JDBCTemplate verwaltet - Sie können dies in Ihrer ConnectionManager-Konfiguration sehen. Auch könnte die Vorlage schließen - aber der zugrunde liegende connectionmanager kann die Verbindung offen lassen für andere Pool-Benutzer – farrellmr

+0

Ich stimme zu und ich verstehe, dass .. Aber zu diesem Zeitpunkt sehe ich Verbindung nicht wiederverwendet, was bedeutet, dass es nicht zurück zum Pool? Wenn das wahr ist, heißt das, dass jdbcTemplate nicht in der Nähe aufruft? Wenn es zurück zum Pool geht, sollte die Aktualisierung sie aus dem Pool wiederverwenden, stattdessen wird connectionManager nach neuen Verbindungen fragen. –

+0

Sie haben keine Kontrolle über den Betrieb des Pools - so kann es entscheiden, wie Sie am besten eine Pool-Strategie basierend auf Ihren Config-Parametern zuweisen – farrellmr

Antwort