Mysql
 sql >> Database >  >> RDS >> Mysql

La connessione a Db muore dopo>4<24 in modalità di ibernazione jpa con avvio a molla

Il modo più semplice è specificare il autoReconnect proprietà nell'URL JDBC, anche se questo non è l'approccio consigliato.

spring.datasource.url = jdbc:mysql://localhost:3306/test?autoReconnect=true

Ciò può causare problemi quando si dispone di una connessione attiva e durante una transazione accade qualcosa e si verificherà una riconnessione. Non darà problemi quando la connessione viene convalidata all'inizio della transazione e viene acquisita una nuova connessione all'inizio.

Tuttavia è probabilmente meglio abilitare la convalida delle tue connessioni durante la vita della tua applicazione. Per questo puoi specificare diverse proprietà .

Innanzitutto inizia specificando il numero massimo di connessioni consentite per il pool. (Per una lettura su come determinare la dimensione massima del pool, leggi questo ).

spring.datasource.max-active=10

Potresti anche voler specificare il numero di connessioni iniziali

spring.datasource.initial-size=5

Quindi vuoi specificare il numero minimo e massimo di connessioni inattive.

spring.datasource.max-idle=5
spring.datasource.min-idle=1

Per convalidare la connessione è necessario specificare una query di convalida e quando convalidare. Poiché vuoi convalidare periodicamente, invece di quando una connessione viene recuperata dal pool (questo per evitare connessioni interrotte nel tuo pool).

spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1

NOTA: L'utilizzo di una validation-query è in realtà sconsigliato poiché JDBC4 ha un modo migliore/diverso per eseguire la convalida della connessione. HikariCP chiamerà automaticamente il metodo di convalida JDBC quando disponibile.

Ora che stai convalidando anche mentre una connessione è inattiva, devi specificare la frequenza con cui desideri eseguire questa query per le connessioni e quando una connessione è considerata inattiva.

spring.datasource.time-between-eviction-runs-millis=5000 (this is the default)
spring.datasource.min-evictable-idle-time-millis=60000 (this is also default)

Tutto ciò dovrebbe attivare la convalida delle tue connessioni (inattive) e quando si verifica un'eccezione o il periodo di inattività è trascorso, le tue connessioni verranno rimosse dal pool.

Supponendo che tu stia utilizzando Tomcat JDBC come pool di connessioni questo è una bella lettura di cosa e come configurare.

AGGIORNAMENTO: Spring Boot 2.x ha cambiato il pool di connessioni predefinito su HikariCP anziché Tomcat JDBC.