sql >> Database >  >> RDS >> Mysql

Verbinding met Db sterft na>4<24 in spring-boot jpa-slaapstand

De eenvoudigste manier is om de autoReconnect . te specificeren eigenschap in de JDBC-url, hoewel dit niet de aanbevolen aanpak is.

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

Dit kan problemen geven als je een actieve verbinding hebt en er tijdens een transactie iets gebeurt en er een herverbinding gaat gebeuren. Het geeft geen problemen wanneer de verbinding bij het begin van de transactie wordt gevalideerd en bij het begin een nieuwe verbinding wordt verkregen.

Het is echter waarschijnlijk beter om validatie van uw verbindingen in te schakelen tijdens de levensduur van uw toepassing. Hiervoor kunt u verschillende eigenschappen specificeren .

Begin eerst met het opgeven van het maximale aantal verbindingen dat u voor de pool toestaat. (Lees voor meer informatie over het bepalen van de maximale poolgrootte dit ).

spring.datasource.max-active=10

Misschien wilt u ook het aantal initiële verbindingen specificeren

spring.datasource.initial-size=5

Vervolgens wil je het min en max aantal inactieve verbindingen specificeren.

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

Om de verbinding te valideren, moet u een validatiequery opgeven en aangeven wanneer u deze moet valideren. Omdat u periodiek wilt valideren, in plaats van wanneer een verbinding wordt opgehaald uit de pool (dit om verbroken verbindingen in uw pool te voorkomen).

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

OPMERKING: Het gebruik van een validation-query wordt eigenlijk afgeraden omdat JDBC4 een betere/andere manier heeft om verbindingsvalidatie uit te voeren. HikariCP roept automatisch de JDBC-validatiemethode aan indien beschikbaar.

Nu u ook valideert terwijl een verbinding niet actief is, moet u specificeren hoe vaak u deze query voor de verbindingen wilt uitvoeren en wanneer een verbinding als niet actief wordt beschouwd.

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

Dit alles zou moeten leiden tot validatie van uw (inactieve) verbindingen en wanneer zich een uitzondering voordoet of de niet-actieve periode is verstreken, worden uw verbindingen uit de pool verwijderd.

Ervan uitgaande dat u Tomcat JDBC gebruikt als de verbindingspool dit is een leuk artikel over wat en hoe je moet configureren.

UPDATE: Spring Boot 2.x heeft de standaard verbindingspool geschakeld naar HikariCP in plaats van Tomcat JDBC.




  1. Opties voor cloudback-up voor MySQL- en MariaDB-databases

  2. Een resultatenset converteren van SQL-array naar array van tekenreeksen

  3. PostgreSQL Cloud Vendor Lock-in vermijden

  4. Hoe een externe MySQL-database in PHP te verbinden