web-dev-qa-db-ja.com

Spring-Boot:最大接続数などのJDBCプールプロパティを設定するにはどうすればよいですか?

Spring-Bootは非常に素晴らしいツールですが、より高度な構成になると、ドキュメントは少しまばらになります。データベース接続プールの最大サイズなどのプロパティを設定するにはどうすればよいですか?

Spring-BootはTomcat-jdbcHikariCP、およびCommons DBCPをネイティブにサポートしていますが、これらはすべて同じように構成されていますか?

58
JBCP

これらの構成プロパティの設定は非常に簡単ですが、 公式ドキュメント の方が一般的であるため、接続プールの構成情報を具体的に検索する場合は見つけにくい場合があります。

Tomcat-jdbcの最大プールサイズを設定するには、.propertiesまたは.ymlファイルでこのプロパティを設定します。

spring.datasource.maxActive=5

必要に応じて、次も使用できます。

spring.datasource.max-active=5

この方法で任意の接続プールプロパティを設定できます。 Tomcat-jdbcでサポートされているプロパティの完全なリストです

これがより一般的にどのように機能するかを理解するには、Spring-Bootコードを少し掘り下げる必要があります。

Spring-Bootは、次のようにDataSourceを構築します( こちらを参照 、行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は、クラスパス上の一連の既知のクラスのそれぞれをチェックすることにより、使用するプーリングライブラリを決定します。次に、DataSourceを構築し、dataSource()関数に返します。

この時点で、@ConfigurationPropertiesを使用して魔法が始まります。このアノテーションは、プレフィックスCONFIGURATION_PREFIX(これはspring.datasource)を持つプロパティを検索するようにSpringに指示します。そのプレフィックスで始まるプロパティごとに、Springはそのプロパティを使用してDataSourceのセッターを呼び出そうとします。

Tomcat DataSourceは DataSourceProxy の拡張で、メソッドsetMaxActive()があります。

そして、それがあなたのspring.datasource.maxActive=5が正しく適用される方法です!

他の接続プールはどうですか

試したことはありませんが、Spring-Bootがサポートする他の接続プール(現在はHikariCPまたはCommons DBCP)のいずれかを使用している場合は、同じ方法でプロパティを設定できるはずですが、プロジェクトを見る必要があります利用可能なものを知るためのドキュメント。

109
JBCP

Spring-Bootの現在のバージョン(1.4.1.RELEASE)では、各プーリングデータソースの実装には、プロパティ用の独自のプレフィックスがあります。

たとえば、Tomcat-jdbcを使用している場合:

spring.datasource.Tomcat.max-wait=10000

あなたは説明を見つけることができます こちら

spring.datasource.max-wait=10000

これはもう効果がありません。

30
Daniel Nuss

接続プールごとに設定が異なります。

たとえば、Tomcat(デフォルト)は以下を想定しています。

spring.datasource.ourdb.url=...

そしてHikariCPは以下に満足します:

spring.datasource.ourdb.jdbc-url=...

定型的な構成なしで両方を満たすことができます:

spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}

接続プールプロバイダーを定義するプロパティはありません。

ソースをご覧ください DataSourceBuilder.Java

Tomcat、HikariCP、またはCommons DBCPがクラスパス上にある場合、そのうちの1つが選択されます(Tomcatが最初にこの順序で)。

...そのため、この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

Spring Boot 2.xでは、プロバイダー固有のプロパティを参照する必要があります。

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

デフォルトのhikariは、spring.datasource.hikari.maximum-pool-sizeで設定できます。

4
Mariano LEANCE

アプリケーションのタイプ/サイズ/負荷/いいえに基づきます。ユーザーの..etc-uは、プロダクションプロパティとしてフォローを続けることができます

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