La conexión a Db muere después de> 4 <24 en resorte de arranque jpa hibernate

Tengo una aplicación que usa Spring-boot, jpa-hiberanate con mysql. Recibo este registro de errores

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'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. 

Aquí está mi application.properties

 # DataSource settings: set here configurations for the database connection spring.datasource.url = jdbc:mysql://localhost:3306/test spring.datasource.username = test spring.datasource.password = test spring.datasource.driverClassName = com.mysql.jdbc.Driver # Specify the DBMS spring.jpa.database = MYSQL # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate settings are prefixed with spring.jpa.hibernate.* spring.jpa.hibernate.ddl-auto = update spring.jpa.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy 

Para resolver este problema, puedo usar

 spring.datasource.testOnBorrow=true spring.datasource.validationQuery=SELECT 1 

Pero comprobé que no es recomendable . Así que, ¿alguien puede sugerirme qué debo hacer para superar este error?

La forma más fácil es especificar la propiedad autoReconnect en la url JDBC, aunque este no es el enfoque recomendado.

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

Esto puede dar problemas cuando tienes una conexión activa y durante una transacción sucede algo y una reconexión va a suceder. No dará problemas cuando la conexión se valida al inicio de la transacción y se adquiere una nueva conexión al inicio.

Sin embargo, probablemente sea mejor habilitar la validación de sus conexiones durante la vida útil de su aplicación. Para esto puede especificar varias propiedades .

Primero comience especificando la cantidad máxima de conexiones que permite para el conjunto. (Para leer sobre cómo determinar el máximo tamaño de la piscina, lea esto ).

 spring.datasource.max-active=10 

También es posible que desee especificar el número de conexiones iniciales

 spring.datasource.initial-size=5 

A continuación, desea especificar el número mínimo y máximo de conexiones inactivas.

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

Para validar la conexión, debe especificar una consulta de validación y cuándo validar. Como quiera validar periódicamente, en lugar de cuando se recupera una conexión del grupo (esto para evitar conexiones rotas en su grupo).

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

Ahora que también está validando mientras una conexión está inactiva, necesita especificar con qué frecuencia desea ejecutar esta consulta para las conexiones y cuando una conexión se considera inactiva.

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

Todo esto debería desencadenar la validación de sus conexiones (inactivas) y cuando se produce una excepción o pasa el período de inactividad, sus conexiones se eliminarán del grupo.

Suponiendo que está utilizando Tomcat JDBC como el grupo de conexiones, esta es una buena lectura de qué y cómo configurarlo.