Spring-Boot ist ein ziemlich tolles Tool, aber die Dokumentation ist etwas spärlich, wenn es um erweiterte Konfigurationen geht. Wie kann ich Eigenschaften wie die maximale Größe für meinen Datenbankverbindungspool festlegen?
Frühlings-Boot unterstützt tomcat-jdbc
, HikariCP
und Commons DBCP
nativ sind sie alle auf die gleiche Weise konfiguriert?
-Dspring.datasource.tomcat.initial-size=10
(Standard ist 10)Antworten:
Es stellt sich heraus, dass das Festlegen dieser Konfigurationseigenschaften ziemlich einfach ist, aber die offizielle Dokumentation ist allgemeiner, so dass es möglicherweise schwierig ist, sie zu finden, wenn Sie speziell nach Konfigurationsinformationen für den Verbindungspool suchen.
Um die maximale Poolgröße für tomcat-jdbc festzulegen, legen Sie diese Eigenschaft in Ihrer .properties- oder .yml-Datei fest:
spring.datasource.maxActive=5
Sie können auch Folgendes verwenden, wenn Sie dies bevorzugen:
spring.datasource.max-active=5
Auf diese Weise können Sie jede gewünschte Verbindungspool-Eigenschaft festlegen. Hier finden Sie eine vollständige Liste der von unterstützten Funktionen
tomcat-jdbc
.Um zu verstehen, wie dies allgemeiner funktioniert, müssen Sie sich ein wenig mit dem Spring-Boot-Code befassen.
Spring-Boot erstellt die DataSource folgendermaßen ( siehe hier , Zeile 102):
@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX) @Bean public DataSource dataSource() { DataSourceBuilder factory = DataSourceBuilder .create(this.properties.getClassLoader()) .driverClassName(this.properties.getDriverClassName()) .url(this.properties.getUrl()) .username(this.properties.getUsername()) .password(this.properties.getPassword()); return factory.build(); }
Der DataSourceBuilder ist dafür verantwortlich, herauszufinden, welche Poolbibliothek verwendet werden soll, indem er im Klassenpfad nach einer Reihe von bekannten Klassen sucht. Anschließend wird die DataSource erstellt und an die
dataSource()
Funktion zurückgegeben.An diesem Punkt beginnt die Verwendung von Magie
@ConfigurationProperties
. Diese Anmerkung weist Spring an, nach Eigenschaften mit dem PräfixCONFIGURATION_PREFIX
( dh) zu suchenspring.datasource
. Für jede Eigenschaft, die mit diesem Präfix beginnt, versucht Spring, den Setter in der DataSource mit dieser Eigenschaft aufzurufen.Die Tomcat DataSource ist eine Erweiterung von DataSourceProxy , die über die Methode verfügt
setMaxActive()
.Und so wird Ihr
spring.datasource.maxActive=5
richtig angewendet!Was ist mit anderen Verbindungspools?
Ich habe es nicht versucht, aber wenn Sie einen der anderen von Spring-Boot unterstützten Verbindungspools (derzeit HikariCP oder Commons DBCP) verwenden, sollten Sie die Eigenschaften auf die gleiche Weise festlegen können, aber Sie müssen sich das Projekt ansehen Dokumentation, um zu wissen, was verfügbar ist.
quelle
spring.datasource.tomcat.max-active
oderspring.datasource.hikari.maximum-pool-size
.spring.datasource.maxActive=1
funktioniert. Diese Leitungspring.datasource.max-active=1
hat bei mir nicht funktioniert. Spring Boot Version2.2.2.RELEASE
In der aktuellen Version von Spring-Boot (1.4.1.RELEASE) hat jede Pooling-Datenquellenimplementierung ein eigenes Präfix für Eigenschaften.
Wenn Sie beispielsweise tomcat-jdbc verwenden:
spring.datasource.tomcat.max-wait=10000
Die Erklärung finden Sie hier
spring.datasource.max-wait=10000
Dies hat keine Wirkung mehr.
quelle
In Spring Boot 2.x müssen Sie auf anbieterspezifische Eigenschaften verweisen.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database
Die Standardeinstellung ist Hikari
spring.datasource.hikari.maximum-pool-size
.quelle
Unterschiedliche Verbindungspools haben unterschiedliche Konfigurationen.
Zum Beispiel erwartet Tomcat (Standard):
und HikariCP wird zufrieden sein mit:
Wir können beide ohne Boilerplate-Konfiguration erfüllen:
Es gibt keine Eigenschaft zum Definieren des Verbindungspoolanbieters.
Schauen Sie sich die Quelle DataSourceBuilder.java an
... also können wir den Verbindungspoolanbieter mithilfe dieser Maven-Konfiguration (pom.xml) einfach ersetzen:
quelle
Basierend auf Ihrem Anwendungstyp / Größe / Last / Nr. von Benutzern ..etc - u kann weiterhin als Ihre Produktionseigenschaften folgen
spring.datasource.tomcat.initial-size=50 spring.datasource.tomcat.max-wait=20000 spring.datasource.tomcat.max-active=300 spring.datasource.tomcat.max-idle=150 spring.datasource.tomcat.min-idle=8 spring.datasource.tomcat.default-auto-commit=true
quelle
spring.datasource.tomcat.max-active=5
spring.datasource.tomcat.max-idle=5
war genug für mich, danke!