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

Wie erzwinge ich die Wiederverwendung von Verbindungen im Jdbc-Pool?

Sie verwenden nicht wirklich einen Verbindungspool. Eine ConnectionPoolDataSource ist nicht zur direkten Verwendung bestimmt. Sie ist als (spezielle) DataSource gedacht für PooledConnection Objekte, die dann von einer (normalen) DataSource in einem Verbindungspool gehalten werden Implementierung, die Verbindungspooling bereitstellt.

Ein normaler Entwickler sollte keine ConnectionPoolDataSource verwenden direkt, es ist für die Verwendung mit Verbindungspools vorgesehen, die von Anwendungsservern bereitgestellt werden, oder um in eine allgemeine DataSource eingeschlossen zu werden s, das Verbindungspooling bereitstellte.

Wenn eine Verbindung vom Verbindungspool angefordert wird, wird eine vorhandene PooledConnection ausgecheckt (oder fordern Sie eine neue von ihrer ConnectionPoolDataSource an ), eine Verbindung abrufen und an den Benutzer zurückgeben. Wenn der Benutzer die Verbindung schließt , die PooledConnection signalisiert dem Verbindungspool, dass er wieder verfügbar ist.

In diesem Fall erstellen Sie eine PooledConnection , Abrufen einer Verbindung daraus entfernen und dann die PooledConnection verwerfen . Das bedeutet, dass die PooledConnection wird abgebrochen, und seine physische Verbindung zur Datenbank kann nicht wiederverwendet werden und wird geschlossen/verworfen, wenn es endgültig der Garbage Collection unterzogen wird (normalerweise wird close() auf der PooledConnection ).

Sie müssen entweder das von Ihrem Anwendungsserver bereitgestellte Verbindungspooling oder einen Allzweck-Verbindungspool wie DBCP, c3p0 oder BoneCP verwenden.