Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment forcer la réutilisation des connexions dans le pool jdbc ?

Vous n'utilisez pas réellement un pool de connexions. Un ConnectionPoolDataSource n'est pas destiné à être utilisé directement. Il est conçu comme un DataSource (spécial) pour PooledConnection des objets qui sont ensuite conservés dans un pool de connexion par un DataSource (normal) mise en œuvre qui fournit le regroupement de connexions.

Un développeur normal ne devrait pas utiliser un ConnectionPoolDataSource directement, il est destiné à être utilisé avec des pools de connexions fournis par des serveurs d'applications, ou à être encapsulé dans un DataSource à usage général s qui fournissait le regroupement de connexions.

Lorsqu'une Connection est demandé à partir du pool de connexion, il extraira une PooledConnection existante (ou en demander un nouveau depuis son ConnectionPoolDataSource ), récupérer une Connection et le renvoyer à l'utilisateur. Lorsque l'utilisateur ferme la Connection , la PooledConnection signalera au pool de connexion qu'il est à nouveau disponible.

Dans ce cas, vous créez une PooledConnection , récupérant une Connection de celui-ci, puis en supprimant le PooledConnection . Cela signifie que la PooledConnection est abandonnée et sa connexion physique à la base de données ne peut pas être réutilisée et sera fermée/supprimée lorsqu'elle sera finalement ramassée (normalement, lorsque le pool de connexions veut fermer la connexion physique, il appellera close() sur la PooledConnection ).

Vous devez soit utiliser le regroupement de connexions fourni par votre serveur d'applications, soit utiliser un pool de connexions à usage général tel que DBCP, c3p0 ou BoneCP.