[JAVA] Paramètres du pool de connexions dans Tomcat.jdbc

Cause: Le journal des erreurs suivant vous a empêché de vous connecter à JDBC.

 Cased by: java.sql.SQLRecoverableException:C'est une connexion fermée.
```
 Contre-mesure: placez la requête de vérification de "SELECT 1 FROM DUAL" (Oracle) dans setValidationQuery, et si setTestOnBorrow (true) est spécifié, il sera vérifié et l'objet sera rejeté et reconnecté, mais il existe de nombreux autres paramètres, donc J'ai agité un commentaire dans la liste.


    public org.apache.tomcat.jdbc.pool.DataSource createDefaultDataSource() {
        org.apache.tomcat.jdbc.pool.DataSource datasource = null;
        PoolConfiguration p = new DefaultProperties();
 // Enregistre le pool de connexions en tant que ConnectionPoolMBean La valeur initiale est true
        p.setJmxEnabled(true);

 // S'il faut émettre une validationQuery sur la connexion inactive pour vérifier la connexion avec la base de données. Une version filetée de testOnBorrow, testOnReturn. Si true est spécifié, l'objet qui est réellement incapable de communiquer avec la base de données est ignoré. Si validationQuery n'est pas spécifié, ne faites rien. Ce test est effectué après le test minEvictableIdleTimeMillis ci-dessus. La valeur initiale est false.
        p.setTestWhileIdle(false);
        p.setTestOnBorrow(false);
        p.setTestOnReturn(false);

 // Défini sur true pour détecter les connexions par omission fermées
        p.setRemoveAbandoned(false);

 // Défini pour afficher la trace de pile de l'application qui n'a pas fermé la connexion au journal lorsqu'une omission de fermeture est détectée.
        p.setLogAbandoned(false);

 // Définit la requête utilisée pour vérifier la vie et la mort de la connexion. Si nul ou un caractère vide est spécifié, la vérification ne sera pas effectuée. La valeur par défaut est nulle.
        p.setValidationQuery(null);

 // Si les connexions obtenues à partir du pool ont été mises en pool pendant plus longtemps que l'intervalle (millisecondes) spécifié ici, vérifiez la vitalité des connexions. La valeur initiale est 10000
        p.setValidationInterval(1800000);

 // Spécifiez l'intervalle d'exécution du thread (millisecondes). S'il est inférieur à 1, le thread ne s'exécutera pas. Par conséquent, dans ce cas, le groupe de paramètres suivant n'a aucune signification même s'il est spécifié. La valeur par défaut est -1, donc ce thread ne fonctionnera pas par défaut.
        p.setTimeBetweenEvictionRunsMillis(10);

 // Temps à considérer comme une omission proche La valeur initiale est de 60 s
        p.setRemoveAbandonedTimeout(180);

 // Heure à laquelle la connexion inactive peut rester dans le pool. Si ce temps s'est écoulé depuis que la connexion était inactive (en millisecondes), elle sera déconnectée et supprimée. Moins de 1 signifie illimité et ne sera jamais détruit. Si vous souhaitez profiter des fonctionnalités testWhileIdle suivantes, il est inutile de spécifier un nombre illimité. La valeur initiale est 1 800 000 (30 minutes).
        p.setMinEvictableIdleTimeMillis(1800000);

 // Taille initiale de la connexion créée au démarrage du pool La valeur initiale est 10
        p.setInitialSize(1);

 // Nombre maximum de connexions actives pouvant être allouées à partir du pool en même temps La valeur initiale est 100
        p.setMaxActive(1);

 // Nombre maximum de connexions à conserver dans le pool La valeur initiale est maxActive
        p.setMaxIdle(1);

 // Nombre minimum de connexions à conserver dans le pool La valeur initiale est initialSize
        p.setMinIdle(1);

 // Temps maximum d'attente lorsqu'aucune connexion n'est disponible (en millisecondes) La valeur initiale est 30000 = (30 secondes)
        p.setMaxWait(30000);

 // Temps de maintien de la connexion (en millisecondes) Si maxAge ou plus est passé de l'heure de connexion lors du retour de la connexion, fermez la connexion. Ne vérifiez pas avec maxAge. La valeur initiale est 0
        p.setMaxAge(180000);

 // Défini sur true si vous voulez que les appels getConnection soient traités équitablement dans la méthode FIFO. En le définissant sur true, l'implémentation org.apache.tomcat.jdbc.pool.FairBlockingQueue est utilisée pour la liste des connexions inactives, et la valeur initiale est true, ce qui garantit que les connexions seront acquises dans l'ordre d'arrivée des threads.
        p.setFairQueue(false);
        datasource = new org.apache.tomcat.jdbc.pool.DataSource();
        datasource.setPoolProperties(p);
        return datasource;
    }
 


Recommended Posts

Paramètres du pool de connexions dans Tomcat.jdbc
J'ai essayé d'implémenter des relations polymorphes à Nogizaka.
Paramètre pour afficher le Javadoc japonais dans IntelliJ IDEA
Paramètres de sortie vers la console de débogage dans Visual Studio Code
Pour déboguer avec Eclipse
Paramètres du joystick dans OpenDS
Comment modifier la valeur de paramètre de application.properties au moment du démarrage dans Spring Boot
Mémo des paramètres Gradle (multi-projets pour tout en un) pour moi-même