L'ibernazione impiega 10 minuti per generare un'eccezione quando il database è inattivo

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

  •  06-07-2019
  •  | 
  •  

Domanda

Sto eseguendo Spring + hibernate 3 + c3p0. All'avvio, se il database non è attivo, viene generata un'eccezione dopo circa 10 minuti. Fino ad allora il programma è bloccato ... Non includo spring xml, hibernate configuration ecc., Dal momento che è un problema abbastanza comune e se esiste una soluzione deve essere un modo standard diretto. Altrimenti posso tagliare il codice cruciale e la configurazione e incollarlo qui. Qualcuno ne sa qualcosa? Grazie in anticipo.


Per chiarire:

Ciò di cui ho essenzialmente bisogno è sapere se c'è un wrapper in c3p0 o ibernazione, o anche primavera, attorno alla funzione DriverManager.setLoginTimeout (). O una funzionalità che mi offre questa funzionalità. Il wrapper potrebbe essere attraverso un'impostazione o qualcosa del genere. Voglio solo ottenere un'eccezione se non mi collego all'origine dati in X secondi, indipendentemente dalla causa (socket, database, maltempo). E voglio trovare un posto per impostare questa X. A peggiorare le cose, il driver Oracle, che è il driver che sto usando, non implementa setLoginTimeout (), quindi non posso usarlo direttamente. Ho capito che non c'è modo di risolverlo, ma di generare manualmente un thread del mio timer. Qualcuno può verificare la situazione di cui sopra? Grazie mille.

È stato utile?

Soluzione

Molto probabilmente non è correlato a Hibernate / Spring in sé; il pool di connessioni al database è responsabile della gestione delle connessioni.

  1. Quali sono le tue impostazioni C3P0?
  2. Quale database / driver stai usando? Esistono impostazioni specifiche del driver che fanno attendere / ritentare il driver stesso prima di segnalare un errore?
  3. "database inattivo" significa "completamente in basso"? O potrebbe essere causato da una sorta di timeout del socket?

Aggiorna (basato sul chiarimento OP di seguito):

DriverManager.setLoginTimeout () non è utilizzato dal driver Oracle. OracleDataSource ha il suo impostazione loginTimeout invece.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top