Hibernate tarda 10 minutos en lanzar una excepción cuando la base de datos está inactiva

StackOverflow https://stackoverflow.com/questions/1614375

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy ejecutando Spring + hibernate 3 + c3p0. Al iniciar, si la base de datos está inactiva, se lanzará una excepción después de unos 10 minutos. Hasta entonces, el programa está bloqueado ... No incluyo xml spring, hibernate, etc., ya que es un problema bastante común y, si existe una solución, debe ser un método estándar y sencillo. Si no, puedo recortar el código crucial y la configuración y pegarlo aquí. ¿Alguien sabe algo al respecto? Gracias de antemano.


Para aclarar:

Lo que básicamente necesito es saber si hay un envoltorio en c3p0 o hibernación, o incluso en primavera, alrededor de la función DriverManager.setLoginTimeout (). O una característica que me ofrece esta funcionalidad. La envoltura podría ser a través de un ajuste o algo. Solo quiero obtener una excepción si no me he conectado a la fuente de datos en X segundos, sin importar la causa (socket, base de datos, mal tiempo). Y quiero encontrar un lugar para configurar esta X. Para empeorar las cosas, el controlador de Oracle, que es el controlador que estoy usando, no implementa setLoginTimeout (), por lo que no puedo usarlo directamente. Me he dado cuenta de que no hay manera de resolverlo, sino de generar manualmente un subproceso de temporizador por mi cuenta. ¿Alguien puede verificar la situación anterior? Muchas gracias.

¿Fue útil?

Solución

Lo más probable es que no esté relacionado con Hibernate / Spring per se; El grupo de conexiones de la base de datos es responsable de tratar las conexiones.

  1. ¿Cuáles son tus configuraciones C3P0?
  2. ¿Qué base de datos / controlador está usando? ¿Hay alguna configuración específica del controlador que haga que el controlador espere / vuelva a intentar antes de informar un error?
  3. Hace " base de datos hacia abajo " significa " completamente abajo " ;? ¿O podría ser causado por algún tipo de tiempo de espera de socket?

Actualizar (según la aclaración del OP a continuación):

DriverManager.setLoginTimeout () no es utilizado por el controlador oracle. OracleDataSource tiene su propio configuración loginTimeout en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top