Mise en commun des connexions avec HikariCP
Réutilisation efficace des connexions
Mise en commun des connexions avec HikariCP est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Pourquoi utiliser un réservoir de connexions
Ouvrir une connexion à une base de données coûte cher : l’établissement de la liaison TCP, l’authentification et l’initialisation de la session peuvent prendre quelques dizaines de millisecondes.
Un réservoir de connexions conserve un ensemble de connexions ouvertes et prêtes à l’emploi. Votre code en emprunte une, l’utilise, puis la rend : une ouverture coûteuse devient ainsi un emprunt rapide.
Découvrez HikariCP
HikariCP est le réservoir de référence pour Java. Il est compact, rapide et fourni par défaut avec Spring Boot.
Il implémente javax.sql.DataSource, de sorte que le reste de votre code JDBC reste identique : vous obtenez simplement les connexions auprès du réservoir plutôt qu’auprès de DriverManager.
Configurer le réservoir
Vous configurez HikariCP avec un objet HikariConfig : l’URL JDBC, les identifiants et le dimensionnement du réservoir.
Vous créez ensuite un HikariDataSource à partir de cet objet. Cette opération est généralement effectuée une seule fois au démarrage de l’application, puis l’objet est partagé.
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class Main {
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/shop");
config.setUsername("app");
config.setPassword("secret");
config.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(config);
System.out.println("Pool ready, max size " + config.getMaximumPoolSize());
ds.close();
}
}Emprunter une connexion
Appelez ds.getConnection() pour emprunter une connexion. Entourez-la, comme d’habitude, d’un bloc qui gère automatiquement les ressources.
Voici l’idée essentielle : fermer une connexion issue d’un réservoir ne ferme pas la connexion réseau physique : la connexion est rendue au réservoir pour être réutilisée.
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
public class Main {
public static void main(String[] args) {
DataSource ds = new HikariDataSource();
try (Connection conn = ds.getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT count(*) FROM users");
ResultSet rs = ps.executeQuery()) {
if (rs.next()) System.out.println("Users: " + rs.getInt(1));
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}<code>close()</code> signifie rendre la connexion
Ce point déroute de nombreux développeurs. Avec un réservoir :
conn.close()rend la connexion au réservoir.- Le réservoir conserve la véritable connexion réseau ouverte pour l’emprunteur suivant.
Vous devez donc toujours la fermer : la gestion automatique des ressources est la bonne approche. Vous la rendez, vous ne la détruisez pas.
Dimensionnement du réservoir
Plus grand ne signifie pas meilleur. Un réservoir trop grand surcharge la base de données avec trop d’opérations concurrentes.
Les recommandations de HikariCP sont les suivantes : un petit réservoir, souvent proche de (core_count * 2) + effective_spindle_count, est généralement plus efficace qu’un réservoir immense. maximumPoolSize fixe la limite ; minimumIdle conserve quelques connexions prêtes.
public class Main {
public static void main(String[] args) {
int cores = 4;
int spindles = 1; // SSD-ish
int recommended = (cores * 2) + spindles;
System.out.println("Suggested max pool size: " + recommended);
}
}Délais d’expiration importants
HikariCP fournit des délais d’expiration qui protègent votre application contre une base de données bloquée :
connectionTimeout— la durée pendant laquelle un emprunt attend avant d’échouer (30 s par défaut).idleTimeout— la durée pendant laquelle une connexion inactive reste ouverte.maxLifetime— retire une connexion après cette durée (maintenez cette valeur en dessous du délai d’expiration propre à la base de données).
Validation des connexions
Les réseaux interrompent parfois les connexions sans avertissement. Avant d’en remettre une, HikariCP peut la valider.
Les pilotes JDBC modernes utilisent Connection.isValid(timeout) ; HikariCP l’appelle automatiquement. Vous pouvez également définir connectionTestQuery pour les anciens pilotes qui ne disposent pas de isValid.
Détection des fuites
Une fuite de connexion se produit lorsque le code emprunte une connexion sans jamais la fermer : le réservoir finit par se vider et chaque emprunt finit par expirer.
Définissez leakDetectionThreshold (par exemple 20 000 ms) : HikariCP consigne une trace de pile pour toute connexion conservée plus longtemps, ce qui vous permet de trouver directement le code fautif.
Un réservoir par application
Créez le HikariDataSource une seule fois et réutilisez-le pendant toute la durée de vie de l’application.
Créer un nouveau réservoir à chaque requête va à l’encontre du but recherché : vous paieriez le coût du démarrage à chaque fois. Fermez le réservoir uniquement lors de l’arrêt, avec ds.close().
Surveiller le réservoir
HikariCP fournit des métriques d’exécution qui vous permettent de surveiller l’état du réservoir.
- Les connexions actives, inactives et totales.
- Les fils d’exécution qui attendent actuellement une connexion.
Il s’intègre à Micrometer, Dropwizard Metrics et JMX. Un nombre constamment élevé de fils « en attente » signifie que le réservoir est trop petit ou que les connexions sont conservées trop longtemps.
Vérification rapide
Avec HikariCP, que fait l’appel à close() sur une connexion empruntée ?
Récapitulatif
HikariCP rend la réutilisation des connexions efficace :
- Configurez un
HikariDataSourceune seule fois au démarrage. - Empruntez une connexion avec
getConnection()dans un bloc de gestion automatique des ressources ;close()la rend au réservoir. - Conservez une valeur modérée pour
maximumPoolSize. - Ajustez
connectionTimeout,maxLifetimeet la validation. - Utilisez
leakDetectionThresholdpour détecter les connexions qui ne sont pas rendues.
Questions Fréquemment Posées
La leçon « Mise en commun des connexions avec HikariCP » est-elle gratuite ?
Oui — le texte complet de « Mise en commun des connexions avec HikariCP » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Mise en commun des connexions avec HikariCP » ?
Réutilisation efficace des connexions Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Mise en commun des connexions avec HikariCP » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Fondamentaux de JDBC
- PreparedStatement
- Transactions
- Mise en commun des connexions avec HikariCP