No podía abrir JPA EntityManager primera vez intentar conectar
Tengo un proyecto Javaspring en azure, esto se conecta a Maria DB Database (otro hosting),
En el Swagger, cuando ejecuto una llamada Api, devuelve este error (La segunda prueba es que son obras, pero después de 10 minutos, falla de nuevo la primera vez)
Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
Mirando el archivo de registros, veo este error
Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@10caecb6 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
Mi archivo de configuración
spring.datasource.url=jdbc:mysql://database
spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# HikariCP
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.pool-name=name-pool
spring.datasource.hikari.max-lifetime=20000
spring.datasource.hikari.idle-timeout=0
spring.datasource.hikari.maximum-pool-size=10
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
Pregunta hecha hace 3 años, 4 meses, 28 días - Por compilerhero
2 Respuestas:
-
El error que estás experimentando sugiere que la conexión a la base de datos se está cerrando después de la primera vez que se usa, y esto está causando el error al intentar abrir un EntityManager en JPA.
El mensaje de error "Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@10caecb6 (No operations allowed after connection closed.)" indica que la conexión se está cerrando después de ser utilizada. Parece que el problema puede estar relacionado con la configuración de HikariCP y el tiempo de vida máximo de la conexión.
Para solucionar este problema, te recomendaría ajustar la configuración de HikariCP en tu archivo de propiedades. En particular, puedes intentar aumentar el valor de
spring.datasource.hikari.max-lifetime
para asegurarte de que la conexión no se cierra prematuramente. Además, también podrías configurar un valor paraspring.datasource.hikari.idle-timeout
para controlar el tiempo máximo que una conexión puede estar inactiva antes de ser cerrada y vuelta a abrir.Por ejemplo, podrías modificar tu configuración de la siguiente manera:
properties spring.datasource.hikari.max-lifetime=600000 (10 minutos) spring.datasource.hikari.idle-timeout=300000 (5 minutos)
Estos valores son solo ejemplos, puedes ajustarlos según tus necesidades y para encontrar el equilibrio entre mantener las conexiones activas y prevenir el cierre prematuro de las mismas.
Después de realizar estos ajustes, reinicia la aplicación y realiza algunas pruebas para ver si el problema persiste. Espero que esta solución te ayude a resolver el problema con la conexión a la base de datos. ¡Déjame saber si necesitas más ayuda!
Respondida el Dec 18, 2020 a las 09:53 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Problema:
La aplicación no puede establecer una conexión con la base de datos MySQL inicialmente, pero después de algunos intentos, la conexión se establece correctamente. Después de 10 minutos de inactividad, el problema vuelve a ocurrir.
Posible causa:
El error sugiere que la conexión de la base de datos se está cerrando prematuramente debido a un valor de
max-lifetime
demasiado corto en la configuración de HikariCP.Solución:
Para resolver este problema, aumenta el valor de
max-lifetime
en la configuración de HikariCP. Esto permitirá que las conexiones permanezcan abiertas durante más tiempo, evitando que se cierren prematuramente.Aquí tienes la configuración actualizada con un valor de
max-lifetime
aumentado:spring.datasource.hikari.max-lifetime=600000
10 minutos
Recomendaciones adicionales:
Monitoriza el uso de la conexión de la base de datos para asegurarte de que no se están agotando las conexiones. Considera el uso de un grupo de conexiones con una caché de conexiones para mejorar el rendimiento. Asegúrate de que la base de datos MySQL está configurada correctamente y acepta conexiones desde la aplicación.
Pasos para implementar la solución:*
- Actualiza el archivo de configuración con el valor de
max-lifetime
aumentado.
- Reinicia la aplicación para que los cambios surtan efecto.
Respondida el Dec 18, 2020 a las 10:02 - por Gemini
Votos positivos: 0 | Votos negativos: 0 - Actualiza el archivo de configuración con el valor de