Pour implémenter le C3P0 de la meilleure façon, vérifiez cette réponse
C3P0 :
Pour les applications d'entreprise, C3P0 est la meilleure approche. C3P0 est une bibliothèque facile à utiliser pour étendre les pilotes JDBC traditionnels (basés sur DriverManager) avec des DataSources pouvant être liées par JNDI, y compris des DataSources qui implémentent la connexion et le pool d'instructions, comme décrit par l'extension jdbc3 spec et jdbc2 std. C3P0 a également géré de manière robuste les déconnexions de base de données et les reconnexions transparentes lors de la reprise, tandis que DBCP n'a jamais récupéré les connexions si la liaison était supprimée en dessous.
C'est pourquoi c3p0 et d'autres pools de connexions ont également préparé des caches d'instructions - cela permet au code d'application d'éviter de traiter tout cela. Les instructions sont généralement conservées dans un pool LRU limité, donc les instructions courantes réutilisent une instance PreparedStatement.
Pire encore, DBCP renvoyait des objets Connection à l'application pour laquelle le transport sous-jacent s'était rompu. Un cas d'utilisation courant pour c3p0 est de remplacer le pool de connexions DBCP standard inclus avec Apache Tomcat. Souvent, un programmeur se retrouvera dans une situation où les connexions ne sont pas correctement recyclées dans le pool de connexions DBCP et c3p0 est un remplacement précieux dans ce cas.
Dans les mises à jour actuelles, C3P0 a des fonctionnalités brillantes. ceux-ci sont donnés ci-dessous:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
Ici, les tailles de pool max et min définissent les limites de connexion, ce qui signifie la connexion minimale et maximale que cette application prendra. MaxIdleTime()
définir quand il libérera la connexion inactive.
DBCP :
Cette approche est également bonne, mais présente certains inconvénients tels que le délai d'expiration de la connexion et la réactivation de la connexion. C3P0 est bon lorsque nous utilisons des projets de mutithreading. Dans nos projets, nous avons utilisé simultanément plusieurs exécutions de threads en utilisant DBCP, puis nous avons obtenu un délai d'expiration de connexion si nous avons utilisé plus d'exécutions de threads. Nous avons donc opté pour la configuration c3p0. Je ne recommanderais pas du tout DBCP, en particulier son talent de jeter des connexions hors du pool lorsque la base de données disparaît, son incapacité à se reconnecter lorsque la base de données revient et son incapacité à ajouter dynamiquement des objets de connexion dans le pool (il se bloque pour toujours sur lecture d'un socket d'E / S JDBCconnect)
Merci :)