Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die Verbindung zu Db wird nach>4<24 im Spring-Boot-JPA-Ruhezustand unterbrochen

Der einfachste Weg ist die Angabe von autoReconnect -Eigenschaft in der JDBC-URL, obwohl dies nicht der empfohlene Ansatz ist.

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

Dies kann zu Problemen führen, wenn Sie eine aktive Verbindung haben und während einer Transaktion etwas passiert und eine erneute Verbindung stattfinden wird. Es treten keine Probleme auf, wenn die Verbindung zu Beginn der Transaktion validiert und zu Beginn eine neue Verbindung hergestellt wird.

Es ist jedoch wahrscheinlich besser, die Validierung Ihrer Verbindungen während der Lebensdauer Ihrer Anwendung zu aktivieren. Dafür können Sie mehrere Eigenschaften angeben .

Beginnen Sie zunächst mit der Angabe der maximalen Anzahl von Verbindungen, die Sie für den Pool zulassen. (Lesen Sie zur Bestimmung der maximalen Poolgröße dies ).

spring.datasource.max-active=10

Möglicherweise möchten Sie auch die Anzahl der anfänglichen Verbindungen angeben

spring.datasource.initial-size=5

Als nächstes möchten Sie die minimale und maximale Anzahl von Leerlaufverbindungen angeben.

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

Um die Verbindung zu validieren, müssen Sie eine Validierungsabfrage und den Zeitpunkt der Validierung angeben. Da Sie regelmäßig validieren möchten, anstatt wenn eine Verbindung aus dem Pool abgerufen wird (um unterbrochene Verbindungen in Ihrem Pool zu verhindern).

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

HINWEIS: Die Verwendung einer validation-query wird eigentlich davon abgeraten, da JDBC4 eine bessere/andere Art der Verbindungsvalidierung hat. HikariCP ruft automatisch die JDBC-Validierungsmethode auf, sofern verfügbar.

Da Sie nun auch validieren, während eine Verbindung im Leerlauf ist, müssen Sie angeben, wie oft Sie diese Abfrage für die Verbindungen ausführen möchten und wann eine Verbindung als im Leerlauf betrachtet wird.

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

Dies alles sollte eine Validierung Ihrer (leeren) Verbindungen auslösen und wenn eine Ausnahme auftritt oder die Leerlaufzeit abgelaufen ist, werden Ihre Verbindungen aus dem Pool entfernt.

Angenommen, Sie verwenden Tomcat JDBC als Verbindungspool dies ist eine schöne Lektüre dessen, was und wie zu konfigurieren ist.

AKTUALISIERUNG: Spring Boot 2.x hat den Standardverbindungspool auf HikariCP anstatt auf Tomcat JDBC umgestellt.