Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Schließen von JDBC-Verbindungen im Pool

Sollte man bei Verwendung des Verbindungspools die Verbindung am Ende schließen? Wenn ja, geht der Zweck des Poolings nicht verloren? Und wenn nicht, woher weiß die Datenquelle, wann eine bestimmte Instanz von Connection freigegeben wird und wiederverwendet werden kann? Ich bin in dieser Hinsicht etwas verwirrt, alle Hinweise sind willkommen.

Ja, natürlich müssen Sie auch die gepoolte Verbindung schließen. Es ist eigentlich ein Wrapper um die eigentliche Verbindung. Es wird unter der Decke die eigentliche Verbindung zum Pool freigeben. Es ist weiterhin Sache des Pools zu entscheiden, ob die tatsächliche Verbindung tatsächlich wird geschlossen oder für ein neues getConnection() wiederverwendet werden Forderung. Unabhängig davon, ob Sie einen Verbindungspool verwenden oder nicht, sollten Sie dies also immer tun schließen Sie alle JDBC-Ressourcen in umgekehrter Reihenfolge im finally Block des try blockieren, wo Sie sie erworben haben. In Java 7 kann dies weiter vereinfacht werden, indem try-with-resources Aussage.

Entspricht die folgende Methode dem Standard? Sieht aus wie ein Versuch, eine Verbindung aus dem Pool herzustellen, und wenn DataSource nicht hergestellt werden kann, verwenden Sie den altmodischen DriverManager. Wir sind nicht einmal sicher, welcher Teil zur Laufzeit ausgeführt wird. Um die obige Frage zu wiederholen, sollte man die Verbindung, die aus einer solchen Methode kommt, schließen?

Das Beispiel ist ziemlich beängstigend. Sie müssen nur die DataSource suchen/initialisieren nur einmal während des Starts der Anwendung in einem Konstruktor / Initialisierung einer anwendungsweiten DB-Konfigurationsklasse. Rufen Sie dann einfach getConnection() auf während der restlichen Lebensdauer der Anwendung auf ein und derselben Datenquelle. Keine Notwendigkeit für Synchronisierung oder Nullprüfungen.

Siehe auch: