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
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. –
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
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. :-) –