web-dev-qa-db-fra.com

Spring-Boot: Comment définir les propriétés du pool JDBC, telles que le nombre maximal de connexions?

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?

55
JBCP

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!

Qu'en est-il des autres pools de connexions

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.

107
JBCP

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.

29
Daniel Nuss

Les différents pools de connexions ont des configurations différentes.

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}

Il n'y a pas de propriété pour définir le fournisseur de pool de connexion.

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>
5
wildloop

Dans Spring Boot 2.x, vous devez référencer les propriétés spécifiques au fournisseur.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database

La valeur par défaut, hikari, peut être définie avec spring.datasource.hikari.maximum-pool-size.

2
Mariano LEANCE

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
0
Pravin