Hibernate prend 10 minutes pour lever une exception lorsque la base de données est en panne

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

  •  06-07-2019
  •  | 
  •  

Question

Je lance Spring + hibernate 3 + c3p0. Au démarrage, si la base de données est en panne, une exception est levée après environ 10 minutes. Jusque-là, le programme est bloqué ... Je n'inclus pas le printemps xml, la configuration d'hibernation, etc., car c'est un problème assez commun et si une solution existe, elle doit être une méthode standard simple. Sinon, je peux couper le code crucial et la configuration et le coller ici. Est-ce que quelqu'un sait quelque chose à ce sujet? Merci d'avance.

Pour clarifier:

Ce dont j'ai essentiellement besoin, c’est de savoir s’il existe un wrapper dans c3p0 ou hibernate, voire printemps, autour de la fonction DriverManager.setLoginTimeout (). Ou une fonctionnalité qui m'offre cette fonctionnalité. Le wrapper pourrait être à travers un paramètre ou quelque chose. Je veux juste obtenir une exception si je n'ai pas connecté à la source de données en X secondes, peu importe la cause (socket, base de données, mauvais temps). Et je veux trouver un endroit pour définir ce X. Pour aggraver les choses, le pilote Oracle, qui est le pilote que j'utilise, n'implémente pas setLoginTimeout (), je ne peux donc pas l'utiliser directement. Je me suis rendu compte qu’il n’y avait aucun moyen de le résoudre, mais de créer manuellement un fil de son propre minuteur. Tout le monde peut vérifier la situation ci-dessus? Merci beaucoup.

Était-ce utile?

La solution

Cela n’est probablement pas lié à Hibernate / Spring en tant que tel; Le pool de connexion à la base de données est responsable du traitement des connexions.

  1. Quels sont vos paramètres C3P0?
  2. Quelle base de données / pilote utilisez-vous? Existe-t-il des paramètres spécifiques au pilote qui font que le pilote lui-même attend / réessaye avant de signaler une erreur?
  3. La " base de données vers le bas " signifie "complètement en panne"? Ou cela pourrait-il être causé par une sorte de délai d'attente de socket?

Mise à jour (d'après la clarification du PO ci-dessous):

DriverManager.setLoginTimeout () n'est pas utilisé par le pilote Oracle. OracleDataSource a son propre paramètre loginTimeout à la place.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top