Utilisation de c3p0 avec Hibernate

Utilisation de c3p0 avec Hibernate

1. Vue d'ensemble

L’établissement de connexions à une base de données coûte assez cher. La base de donnéesconnection pooling est un moyen bien établi de réduire ces dépenses.

Dans ce didacticiel, nous allons expliquer comment utiliserc3p0 avec Hibernate pour regrouper les connexions.

2. Qu'est-ce que c3p0?

c3p0 isa Java library that provides a convenient way for managing database connections.

En bref, il y parvient en créant un pool de connexions. Il gère également efficacement le nettoyage deStatements etResultSets après utilisation. Ce nettoyage est nécessaire pour optimiser l'utilisation des ressources et éviter les blocages évitables.

This library integrates seamlessly with various traditional JDBC drivers. De plus, il fournit une couche pour adapter les pilotes JDBC basés sur DriverManager au nouveau schémajavax.sql.DataSource .

Et, comme Hibernate prend en charge la connexion aux bases de données via JDBC,it’s simple to use Hibernate and c3p0 together.

3. Configuration de c3p0 avec Hibernate

Voyons maintenant comment configurer une application Hibernate existante pour utiliser c3p0 comme gestionnaire de connexions à la base de données.

3.1. Dépendances Maven

Tout d'abord, nous devons d'abord ajouter la dépendance mavenhibernate-c3p0:


    org.hibernate
    hibernate-c3p0
    5.3.6.Final

Avec Hibernate 5, il suffit d’ajouter la dépendance ci-dessus pour activer c3p0. This is true as long as no other JDBC connection pool manager is specified.

Par conséquent, après avoir ajouté la dépendance, nous pouvons exécuter notre application et consulter les journaux:

Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
Initializing c3p0 pool... [email protected] [ ... default settings ... ]

Si un autre gestionnaire de pool de connexions JDBC est utilisé, nous pouvons forcer notre application à utiliser c3p0. Nous avons juste besoin de définir lesprovider_class surC3P0ConnectionProvider dans notre fichier de propriétés:

hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider

3.2. Propriétés du pool de connexions

Finalement, nous devrons remplacer la configuration par défaut. Nous pouvons ajouter des propriétés personnalisées au fichierhibernate.cfg.xml:

5
20
5
1800

De même, le fichierhibernate.properties peut contenir les mêmes paramètres:

hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.acquire_increment=5
hibernate.c3p0.timeout=1800

La propriétémin_size spécifie le nombre minimum de connexions qu'elle doit maintenir à un moment donné. By default, it will maintain at least three connections. Ce paramètre définit également la taille initiale du pool.

La propriétémax_size spécifie le nombre maximum de connexions qu'elle peut maintenir à un moment donné. By default, it will keep a maximum of 15 connections.

La propriétéacquire_increment spécifie le nombre de connexions qu'elle doit essayer d'acquérir si le pool manque de connexions disponibles. Par défaut, il tentera d’acquérir trois nouvelles connexions.

La propriététimeout spécifie le nombre de secondes pendant lesquelles une connexion inutilisée sera conservée avant d'être supprimée. By default, connections will never expire from the pool.

Nous pouvons vérifier les nouveaux paramètres du pool en vérifiant à nouveau les journaux:

Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
Initializing c3p0 pool... [email protected] [ ... new settings ... ]

Ce sont les propriétés de base du pool de connexion. De plus, d'autres propriétés de configuration peuvent être trouvées dans lesofficial guide.

5. Conclusion

Dans cet article, nous avons expliqué comment utiliser c3p0 avec Hibernate. Nous avons examiné certaines propriétés de configuration courantes et ajouté c3p0 à une application de test.

Pour la plupart des environnements, nous vous recommandons d'utiliser un gestionnaire de pool de connexions tel que c3p0 ouHikariCP au lieu des pilotes JDBC traditionnels.

Comme d'habitude, le code source complet de ce tutoriel est disponible surGitHub.