Délai d'expiration de la connexion dans Spring Boot avec JPA et Hibernate
Lors de l'utilisation de Spring Boot avec JPA-Hibernate et MySQL, vous pouvez rencontrer l'erreur suivante :
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 56,006,037 milliseconds ago. The last packet sent successfully to the server was 56,006,037 milliseconds ago. is longer than the server configured value of 'wait_timeout'.
Ce problème survient en raison d'une inactivité prolongée de la connexion,導致伺服器終止連線。
Solution non recommandée
Une solution courante Une approche pourtant déconseillée consiste à activer les tests de connexion lors de l'emprunt :
spring.datasource.testOnBorrow=true spring.datasource.validationQuery=SELECT 1
Solution recommandée
Une solution plus complète implique :
Définition du spring.datasource.url pour inclure la propriété autoReconnect :
spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true
Spécification du nombre maximal de connexions actives :
spring.datasource.max-active=10
Spécification des connexions initiales :
spring.datasource.initial-size=5
Définition des connexions inactives maximales et minimales :
spring.datasource.max-idle=5 spring.datasource.min-idle=1
Activation de la validation des connexions :
spring.datasource.test-while-idle=true spring.datasource.test-on-borrow=true
Spécification de la requête de validation et du délai d'expiration de la connexion inactive :
spring.datasource.validation-query=SELECT 1 spring.datasource.time-between-eviction-runs-millis=5000 spring.datasource.min-evictable-idle-time-millis=60000
Remarque pour HikariCP
Dans Spring Boot 2.x, le pool de connexions a été basculé vers HikariCP. Reportez-vous à la documentation HikariCP pour d'autres options de configuration.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!