sql >> Base de Datos >  >> RDS >> Mysql

La conexión a Db muere después de> 4 <24 en spring-boot jpa hibernate

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

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

Esto puede generar problemas cuando tiene una conexión activa y durante una transacción sucede algo y va a ocurrir una reconexión. No dará problemas cuando la conexión se valide al inicio de la transacción y se adquiera 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 ello puedes especificar varias propiedades .

Primero comience especificando el número máximo de conexiones que permite para el grupo. (Para una lectura sobre cómo determinar el tamaño máximo del grupo, 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 desea 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

NOTA: El uso de una validation-query en realidad se desaconseja, ya que JDBC4 tiene una forma mejor/diferente de realizar la validación de la conexión. HikariCP llamará automáticamente al método de validación de JDBC cuando esté disponible.

Ahora que también está validando mientras una conexión está inactiva, debe especificar con qué frecuencia desea ejecutar esta consulta para las conexiones y cuándo 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 ocurra una excepción o el período de inactividad haya pasado, sus conexiones se eliminarán del grupo.

Suponiendo que está utilizando Tomcat JDBC como grupo de conexiones esto es una buena lectura de qué y cómo configurar.

ACTUALIZACIÓN: Spring Boot 2.x cambió el grupo de conexiones predeterminado a HikariCP en lugar de Tomcat JDBC.