Configuration du pool de connexion MySQL avec SpringBoot

Pool de connexion HikariCP

SpringBoot utilise par défaut HikariCP comme pool de connexion, aucune dépendance externe n'est nécessaire.

spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/mabd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
        username: admin
        password: admin123
        hikari:
         #Nombre minimum de connexions inactives
         minimum-idle: 5
         #Validation automatique des connexions retournées au pool
         auto-commit: true
         #Durée maximale d'inactivité, 10 secondes
         idle-timeout: 10000
         #Durée de vie maximale d'une connexion dans le pool
         max-lifetime: 1800000
         #Délai d'expiration de la connexion à la base de données
         connection-timeout: 30000

Pool de connexion Druid

Cliquez ici pour voir la méthode de connexion statique à la base de données avec SpringBoot

spring:
    datasource:
        druid:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/mabd?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
          username: admin
          password: admin123
          # Taille initiale, minimale et maximale
          initial-size: 5
          max-active: 20
          min-idle: 3
          # Délai d'attente pour obtenir une connexion
          max-wait: 60000
          # Intervalle de vérification des connexions inactives à fermer (millisecondes)
          time-between-eviction-runs-millis: 60000
          # Durée minimale de vie d'une connexion dans le pool (millisecondes)
          min-evictable-idle-time-millis: 300000 
          # Activer PSCache et spécifier la taille par connexion
          pool-prepared-statements: true
          max-pool-prepared-statement-per-connection-size: 20
          # Filtres pour监控 et statistiques, wall pour pare-feu, log4j pour les logs
          filters: stat,wall,slf4j
          # Propriétés de connexion pour activer mergeSql et enregistrer les requêtes lentes
          connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

Ajout des dépendances

Choisir l'une des deux options

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.9</version>
</dependency>

Création de la classe de configuraton

import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration
public class DatabaseConfig {
    
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DataSource creerSourceDonnees() {
        return new DruidDataSource();
    }
}

Paramètres de la chaîne de connexion JDBC

jdbc:mysql://localhost:3306/maboutique?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false

Paramètre Description Valeur par défaut Version minimale
user Nom d'utilisateur de la base de données - Toutes versions
password Mot de passe utilisateur - Toutes versions
useUnicode Utilisation du jeu de caractères Unicode false 1.1g
characterEncoding Encodage des caractères (gb2312 ou gbk) false 1.1g
autoReconnect Reconnexion automatique en cas de coupure false 1.1
autoReconnectForPools Stratégie de reconnexion pour les pools false 3.1.3
failOverReadOnly Lecture seule après reconnexion true 3.0.12
maxReconnects Nombre de tentatives de reconnexion 3 1.1
initialTimeout Intervalle entre les reconnexions (secondes) 2 1.1
connectTimeout Délai de connexion socket (ms) 0 3.0.1
socketTimeout Délai opérations socket (ms) 0 3.0.1
jdbc:mysql://localhost:3306/maboutique

Connexion à la base de données locale : maboutique, port : 3306

useUnicode=true&characterEncoding=UTF-8

Résolution des problèmes d'encodage : activation du support Unicode avec utf8.

serverTimezone=UTC

La configuration serverTimezone=UTC est nécessaire avec le driver JDBC MySQL 6+ (com.mysql.cj.jdbc.Driver) pour spécifier le fuseau horaire. UTC est le temps universel coordonné, soit 8 heures avant l'heure de Beijing. Il est également possible de configurer serverTimezone=CST ou serverTimezone=Asia/Shanghai.

useSSL=false

Pour MySQL version 5.7+, le paramètre useSSL=false est obligatoire. Les versions antérieures n'ont pas besoin de ce paramètre car la valeur par défaut est false. L'utilisation de useSSL=false est recommandée, particulièrement lors du déploiement sur Linux. useSSL=true requiert des certiifcats de sécurité tandis que useSSL=false utilise simplement login/mot de passe.

autoReconnect=true&failOverReadOnly=false

Configuration autoReconnect=true pour tenter une reconnexion automatique après une déconnexion. Attribution failOverReadOnly=false pour empêcher le mode lecture seule lors du basculement.

zeroDateTimeBehavior=convertToNull

Lorsque la base de données retourne une date '0000-00-00 00:00:00', le driver JDBC la convertit en null en Java, évitant ainsi les erreurs liées aux valeurs de date/heure invalides.

rewriteBatchedStatements=true

Ce paramètre permet au driver de réécrire les instructions SQL groupées pour une exécution plus efficace.

Résultat :

INSERT INTO nom_table (colonne1, colonne2) VALUES (valeur1a, valeur2a), (valeur1b, valeur2b), (valeur1c, valeur2c);

Étiquettes: spring-boot MySQL HikariCP druid connection-pool

Publié le 26 juin à 21h48