Ce n'est pas la bonne façon. La source de données doit être gérée par le conteneur dans lequel vous exécutez l'application. Le MysqlConnectionPoolDataSource
n'est pas un pool de connexion. C'est juste une implémentation concrète du javax.sql.DataSource
interface. Vous le définissez normalement dans le contexte JNDI et vous l'obtenez à partir de là. De plus, MySQL lui-même l'indique explicitement dans leur documentation
.
Maintenant, comment l'utiliser dépend de l'objectif de l'application. S'il s'agit d'une application Web, vous devez vous référer à la documentation des ressources JNDI du servletcontainer/appserver en question. Si c'est par exemple Tomcat, alors vous pouvez le trouver ici . Si vous exécutez une application cliente - pour laquelle je remettrais fortement en question la valeur d'un pool de connexions -, vous devez rechercher un framework de pooling de connexions qui peut utiliser la source de données poolée de connexions fournie par MySQL, telle que C3P0 .
L'autre problème avec le code que vous avez posté est que le PooledConnection#getConnection()
renverra le sous-jacent connexion qui n'est donc pas une connexion mutualisée. Appeler à proximité ne rétablira pas la connexion à la piscine, mais la fermera vraiment. Le pool doit créer une nouvelle connexion à chaque fois.
Ensuite, l'histoire de la sécurité des threads, qui dépend du réel framework de mutualisation des connexions en question. C3P0 a prouvé sa robustesse depuis des années, vous ne vous en souciez pas tant que vous écrivez du code JDBC selon l'idiome standard, c'est-à-dire utilisez uniquement les interfaces JDBC et acquérir et fermer toutes les ressources (Connection
, Statement
et ResultSet
) dans la portée la plus courte possible.