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


81

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

春ブートサポートtomcat-jdbcHikariCPおよびCommons DBCPネイティブには、それらはすべて同じように構成されていますか?


BoneCPやC3P0などの別のデータソースプロバイダーを使用する方が良いと思います
Luiggi Mendoza

3
-Dspring.datasource.tomcat.initial-size=10(デフォルトは10)
Christophe Roussy 2017

回答:


122

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

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

spring.datasource.maxActive=5

必要に応じて、以下を使用することもできます。

spring.datasource.max-active=5

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

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

Spring-Bootは次のようにデータソースを構築します(ここの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()関数に。

この時点で、魔法が使用を開始し@ConfigurationPropertiesます。このアノテーションは、プレフィックスが付いたプロパティを探すようにSpringに指示しますCONFIGURATION_PREFIXspring.datasource)。そのプレフィックスで始まるプロパティごとに、Springはそのプロパティを使用してデータソースのセッターを呼び出そうとします。

Tomcat DataSourceは、メソッドを持つDataSourceProxyの拡張です。setMaxActive()

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

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

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


6
そこ1つ上の明示的な文書は、(それが起こるように):docs.spring.io/spring-boot/docs/current/reference/htmlsingle/...が。また、アプリを起動して/ configpropsを確認することもできます(アクチュエーターを使用)。ドキュメントの問題は、すべてのDataSource実装のプロパティがわずかに異なることです(Java Beanにバインドしているだけです)。
Dave Syer 2014

これを@DaveSyerに指摘していただき、ありがとうございます。接続プールに関連するキーワードを検索する場合、SEOにあまり適していません。接続プールの構成が異なることに同意します。そのため、そのセクションを追加しました。答えを更新します。
JBCP 2014

8
ダニエルやワイルドループのような他の答えを参照してください。それ以降のSpringBootバージョンでは、多くの設定でプロバイダー固有の設定を行う必要があります。例spring.datasource.tomcat.max-activeまたはspring.datasource.hikari.maximum-pool-size
ダン・タナー

私の場合はspring.datasource.maxActive=1うまくいきました。この行spring.datasource.max-active=1は私にはうまくいきませんでした。春のブートバージョン2.2.2.RELEASE
ラファエル・

32

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

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

spring.datasource.tomcat.max-wait=10000

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

spring.datasource.max-wait=10000

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



6

接続プールが異なれば、構成も異なります。

たとえば、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>

3

アプリケーションのタイプ/サイズ/負荷/いいえに基づきます。ユーザーの..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

追加するspring.datasource.tomcat.max-active=5 spring.datasource.tomcat.max-idle=5だけで十分でした、ありがとう!
L.Butz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.