Spring-Boot est un outil génial, mais la documentation est un peu restreinte en ce qui concerne la configuration plus avancée. Comment définir des propriétés telles que la taille maximale du pool de connexions à la base de données?
Spring-Boot supporte Tomcat-jdbc
, HikariCP
et Commons DBCP
nativement sont-ils configurés de la même manière?
Il s'avère que la définition de ces propriétés de configuration est assez simple, mais la documentation officielle est plus générale et peut donc être difficile à trouver lors de la recherche spécifique d'informations de configuration de pool de connexions.
Pour définir la taille maximale du pool pour Tomcat-jdbc, définissez cette propriété dans votre fichier .properties ou .yml:
spring.datasource.maxActive=5
Vous pouvez également utiliser les éléments suivants si vous préférez:
spring.datasource.max-active=5
Vous pouvez définir n'importe quelle propriété de pool de connexions souhaitée. Voici une liste complète des propriétés prises en charge par Tomcat-jdbc
.
Pour comprendre comment cela fonctionne plus généralement, vous devez intégrer un peu le code Spring-Boot.
Spring-Boot construit la source de données comme ceci ( voir ici , ligne 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();
}
DataSourceBuilder est chargé de déterminer quelle bibliothèque de pooling utiliser en vérifiant chacune des séries de classes connues sur le chemin d'accès aux classes. Il construit ensuite le DataSource et le renvoie à la fonction dataSource()
.
À ce stade, la magie entre en action en utilisant @ConfigurationProperties
. Cette annotation indique à Spring de rechercher les propriétés avec le préfixe CONFIGURATION_PREFIX
(qui est spring.datasource
). Pour chaque propriété commençant par ce préfixe, Spring tentera d'appeler le créateur de la source de données avec cette propriété.
Tomcat DataSource est une extension de DataSourceProxy , qui a la méthode setMaxActive()
.
Et c'est comme ça que votre spring.datasource.maxActive=5
est appliqué correctement!
Je n'ai pas essayé, mais si vous utilisez l'un des autres pools de connexions pris en charge par Spring-Boot (actuellement HikariCP ou Commons DBCP), vous devriez pouvoir définir les propriétés de la même manière, mais vous devrez examiner le projet. documentation pour savoir ce qui est disponible.
Dans la version actuelle de Spring-Boot (1.4.1.RELEASE), chaque implémentation de source de données de pooling possède son propre préfixe pour les propriétés.
Par exemple, si vous utilisez Tomcat-jdbc:
spring.datasource.Tomcat.max-wait=10000
Vous pouvez trouver l'explication sur ici
spring.datasource.max-wait=10000
cela n'a plus d'effet.
Par exemple, Tomcat (par défaut) attend:
spring.datasource.ourdb.url=...
et HikariCP sera heureux avec:
spring.datasource.ourdb.jdbc-url=...
Nous pouvons satisfaire à la fois sans configuration standard:
spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}
Jetez un coup d'œil à la source DataSourceBuilder.Java
Si Tomcat, HikariCP ou Commons DBCP sont sur le chemin de classe, l'un d'eux sera sélectionné (dans cet ordre avec Tomcat en premier).
... donc, nous pouvons facilement remplacer le fournisseur de pool de connexions à l’aide de cette configuration maven (pom.xml):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.Apache.Tomcat</groupId>
<artifactId>Tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
Dans Spring Boot 2.x, vous devez référencer les propriétés spécifiques au fournisseur.
La valeur par défaut, hikari, peut être définie avec spring.datasource.hikari.maximum-pool-size
.
Basé sur votre type d'application/taille/charge/no. des utilisateurs ..etc - u peut continuer à suivre vos propriétés de production
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