Mysql
 sql >> Base de données >  >> RDS >> Mysql

La connexion à Db meurt après> 4 <24 dans spring-boot jpa hibernate

Le plus simple est de spécifier le autoReconnect propriété dans l'URL JDBC, bien que ce ne soit pas l'approche recommandée.

spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true

Cela peut poser des problèmes lorsque vous avez une connexion active et pendant une transaction, quelque chose se produit et une reconnexion va se produire. Cela ne posera pas de problèmes lorsque la connexion est validée au début de la transaction et qu'une nouvelle connexion est acquise au début.

Cependant, il est probablement préférable d'activer la validation de vos connexions pendant la durée de vie de votre application. Pour cela vous pouvez spécifier plusieurs propriétés .

Commencez par spécifier le nombre maximum de connexions que vous autorisez pour le pool. (Pour une lecture sur la détermination de la taille maximale du pool, lisez ceci ).

spring.datasource.max-active=10

Vous pouvez également spécifier le nombre de connexions initiales

spring.datasource.initial-size=5

Ensuite, vous souhaitez spécifier le nombre minimum et maximum de connexions inactives.

spring.datasource.max-idle=5
spring.datasource.min-idle=1

Pour valider la connexion, vous devez spécifier une requête de validation et quand valider. Comme vous souhaitez valider périodiquement, au lieu de lorsqu'une connexion est récupérée à partir du pool (ceci pour éviter les connexions interrompues dans votre pool).

spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1

REMARQUE : L'utilisation d'une validation-query est en fait déconseillé car JDBC4 a une façon meilleure/différente de valider la connexion. HikariCP appellera automatiquement la méthode de validation JDBC lorsqu'elle sera disponible.

Maintenant que vous validez également lorsqu'une connexion est inactive, vous devez spécifier à quelle fréquence vous souhaitez exécuter cette requête pour les connexions et quand une connexion est considérée comme inactive.

spring.datasource.time-between-eviction-runs-millis=5000 (this is the default)
spring.datasource.min-evictable-idle-time-millis=60000 (this is also default)

Tout cela devrait déclencher la validation de vos connexions (inactives) et lorsqu'une exception se produit ou que la période d'inactivité est passée, vos connexions seront supprimées du pool.

En supposant que vous utilisez Tomcat JDBC comme pool de connexion ceci est une bonne lecture de quoi et comment configurer.

MISE À JOUR : Spring Boot 2.x a basculé le pool de connexions par défaut sur HikariCP au lieu de Tomcat JDBC.