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

Verwende ich Java PooledConnections korrekt?

Das ist nicht der richtige Weg. Die Datenquelle muss von dem Container verwaltet werden, in dem Sie die Anwendung ausführen. Die MysqlConnectionPoolDataSource ist nicht ein Verbindungspool. Es ist nur eine konkrete Implementierung des javax.sql.DataSource Schnittstelle. Sie definieren es normalerweise im JNDI-Kontext und beziehen es von dort. Auch MySQL selbst sagt alles ausdrücklich in deren Dokumentation .

Nun, wie es verwendet wird, hängt vom Zweck der Anwendung ab. Wenn es sich um eine Webanwendung handelt, müssen Sie auf die JNDI-Ressourcendokumentation des betreffenden Servletcontainers/Anwendungsservers verweisen. Wenn es zum Beispiel Tomcat ist, dann finden Sie es hier . Wenn Sie eine Clientanwendung ausführen – für die ich den Wert eines Verbindungspools stark in Frage stellen würde –, müssen Sie nach einem Verbindungspooling-Framework suchen, das die von MySQL bereitgestellte Verbindungspool-Datenquelle verwenden kann, wie z C3P0 .

Das andere Problem mit dem von Ihnen geposteten Code ist, dass PooledConnection#getConnection() gibt den Basiswert zurück Verbindung, die somit nicht ist eine gepoolte Verbindung. Wenn Sie es schließen, wird die Verbindung zum Pool nicht zurückgegeben, sondern nur wirklich geschlossen. Der Pool muss jedes Mal eine neue Verbindung herstellen.

Dann die Threadsicherheitsgeschichte, die vom Echten abhängt Verbindungspooling-Framework in Frage. C3P0 hat seine Robustheit seit Jahren bewiesen, Sie müssen sich keine Sorgen machen, solange Sie JDBC-Code nach dem Standard-Idiom schreiben, d.h. nur verwenden die JDBC-Schnittstellen und erwerben and alle Ressourcen schließen (Connection , Statement und ResultSet ) im kürzest möglichen Umfang.