2015-11-15 14 views
6

Mi piacciono tutti per una risposta che non ho trovato nel documento HikariCP. Dato che impostare i seguenti parametri piscina:in che modo Hikari ricicla le connessioni?

minimumIdle 1 
idleTimeout 10 minutes 
maxLifeTime 20 minutes 

Quando mio app rimane inattivo (con nessuno effettuare richieste) durante la notte, mi aspetto Hikari per chiudere ogni connessione 10 minuti dopo l'ultima richiesta del collegamento, dopo l'ultimo collegamento essendo chiuso creane uno nuovo (e tienilo nel pool), quindi chiudi e ricrea la connessione inattiva ogni 20 minuti. Ho capito bene?

Il fatto è che dopo un periodo di inattività sulla mia app, vedo (uppon la prossima richiesta) la seguente eccezione:

WARN c.z.hikari.proxy.ConnectionProxy - Connection [email protected] <POOL_NAME> marked as broken because of SQLSTATE(08003), ErrorCode(17008). 
java.sql.SQLRecoverableException: Closed Connection 

La connessione è probabilmente stata chiusa da Oracle e non può essere utilizzato. Cercherò di evitarlo usando la configurazione di cui sopra. Un altro punto è che non capisco perché ottengo una connessione chiusa dal pool. Questo non dovrebbe mai accadere, poiché Hikari verifica lo stato della connessione prima di restituirlo ...

Nota: non sono il proprietario del DB, non posso configurarlo o lasciare che sia riconfigurato in base alle mie esigenze. Inoltre non ho accesso alla sua configurazione.

Il nostro set-up è primavera 4.1.6, Hibernate 4.3.7 con JPA 2.1 API, Hikari 2.1.0

risposta

2

vostra comprensione dei parametri piscina è corretta. È possibile che l'istanza Oracle abbia un timeout di inattività più breve di 10 minuti. Una cosa che puoi fare è abilitare la registrazione del livello DEBUG per il pacchetto com.zaxxer.hikari. Riceverai molte più informazioni su ciò che sta accadendo all'interno di HikariCP, senza essere troppo rumoroso.

Sentitevi liberi di pubblicare il registro come issue on Github e daremo un'occhiata a questo.

+0

Ok, vedrò se riesco a ottenere i registri utili. Qual è la tua opinione su hikari restituendomi una connessione chiusa? Dato che sono su Oracle 11g usando l'ultimo driver JDBC, isValid() dovrebbe funzionare. Vedo questo grande SQLException adorabile quando Hibernate tenta di eseguire una query sulla connessione chiusa. Quindi ottengo definitivamente una connessione chiusa dal pool. –

+0

Ero abbastanza sicuro che il driver Oracle implementasse correttamente l'API isAlive() JDBC4, ma potreste provare a configurare una connectionTestQuery. HikariCP lo utilizzerà invece, se configurato. Nota: assicurati anche che Spring e/o Hibernate non stiano effettuando la cache nella sessione Connections (in qualche modo) - possibilmente un'impostazione. – brettw

+0

Ho più informazioni. Sembra che ci sia una perdita di connessione all'avvio dell'applicazione. Anche prima della prima richiesta risultante dell'interazione dell'utente. Quindi dobbiamo indagare su questo. Ti informerò ulteriormente quando avrò più informazioni. Grazie alla registrazione delle statistiche di datasource di hikari. :-) –

Problemi correlati