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

Fermeture des connexions JDBC dans le pool

Lors de l'utilisation du pool de connexions, faut-il fermer la connexion à la fin ? Si oui, le but de la mutualisation n'est-il pas perdu ? Et si ce n'est pas le cas, comment le DataSource sait-il quand une instance particulière de Connection est libérée et peut être réutilisée ? Je suis un peu confus sur celui-ci, tous les pointeurs sont appréciés.

Oui, vous devez certainement fermer également la connexion groupée. C'est en fait un wrapper autour de la connexion réelle. Il libérera sous les couvertures la connexion réelle à la piscine. C'est ensuite au pool de décider si la connexion réelle sera réellement être fermé ou être réutilisé pour un nouveau getConnection() appel. Ainsi, que vous utilisiez ou non un pool de connexions, vous devez toujours fermer toutes les ressources JDBC dans l'ordre inverse dans le finally bloc du try bloc où vous les avez acquis. Dans Java 7, cela peut être encore simplifié en utilisant try-with-resources déclaration.

La méthode suivante est-elle proche de la norme ? Cela ressemble à une tentative d'obtenir une connexion à partir du pool, et si DataSource ne peut pas être établi, utilisez l'ancien DriverManager. Nous ne savons même pas quelle partie est exécutée au moment de l'exécution. En répétant la question ci-dessus, faut-il fermer la Connection sortant d'une telle méthode ?

L'exemple est assez effrayant. Il vous suffit de rechercher/initialiser le DataSource une seule fois lors du démarrage de l'application dans un constructeur / initialisation d'une classe de configuration de base de données à l'échelle de l'application. Ensuite, appelez simplement getConnection() sur une seule et même source de données pendant tout le reste de la vie de l'application. Pas besoin de synchronisation ni de nullchecks.

Voir aussi :