Spring-Bootは非常に優れたツールですが、より高度な構成に関しては、ドキュメントが少しまばらです。データベース接続プールの最大サイズなどのプロパティを設定するにはどうすればよいですか?
春ブートサポートtomcat-jdbc
、HikariCP
およびCommons DBCP
ネイティブには、それらはすべて同じように構成されていますか?
Spring-Bootは非常に優れたツールですが、より高度な構成に関しては、ドキュメントが少しまばらです。データベース接続プールの最大サイズなどのプロパティを設定するにはどうすればよいですか?
春ブートサポートtomcat-jdbc
、HikariCP
およびCommons DBCP
ネイティブには、それらはすべて同じように構成されていますか?
-Dspring.datasource.tomcat.initial-size=10
(デフォルトは10)
回答:
これらの構成プロパティの設定は非常に簡単ですが、公式ドキュメントの方が一般的であるため、接続プールの構成情報を具体的に検索するときに見つけるのが難しい場合があります。
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_PREFIX
(spring.datasource
)。そのプレフィックスで始まるプロパティごとに、Springはそのプロパティを使用してデータソースのセッターを呼び出そうとします。
Tomcat DataSourceは、メソッドを持つDataSourceProxyの拡張です。setMaxActive()
。
そしてそれはあなたの方法です spring.datasource.maxActive=5
が正しく適用されるです!
私は試していませんが、Spring-Bootでサポートされている他の接続プール(現在はHikariCPまたはCommons DBCP)のいずれかを使用している場合は、同じ方法でプロパティを設定できるはずですが、プロジェクトを確認する必要があります何が利用できるかを知るためのドキュメント。
spring.datasource.tomcat.max-active
またはspring.datasource.hikari.maximum-pool-size
。
spring.datasource.maxActive=1
うまくいきました。この行spring.datasource.max-active=1
は私にはうまくいきませんでした。春のブートバージョン2.2.2.RELEASE
Spring Boot 2.xでは、プロバイダー固有のプロパティを参照する必要があります。
デフォルトのhikariはspring.datasource.hikari.maximum-pool-size
。で設定できます。
たとえば、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>
アプリケーションのタイプ/サイズ/負荷/いいえに基づきます。ユーザーの..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
だけで十分でした、ありがとう!