Spring-Bootは非常に素晴らしいツールですが、より高度な構成になると、ドキュメントは少しまばらになります。データベース接続プールの最大サイズなどのプロパティを設定するにはどうすればよいですか?
Spring-BootはTomcat-jdbc
、HikariCP
、およびCommons DBCP
をネイティブにサポートしていますが、これらはすべて同じように構成されていますか?
これらの構成プロパティの設定は非常に簡単ですが、 公式ドキュメント の方が一般的であるため、接続プールの構成情報を具体的に検索する場合は見つけにくい場合があります。
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)のいずれかを使用している場合は、同じ方法でプロパティを設定できるはずですが、プロジェクトを見る必要があります利用可能なものを知るためのドキュメント。
Spring-Bootの現在のバージョン(1.4.1.RELEASE)では、各プーリングデータソースの実装には、プロパティ用の独自のプレフィックスがあります。
たとえば、Tomcat-jdbcを使用している場合:
spring.datasource.Tomcat.max-wait=10000
あなたは説明を見つけることができます こちら
spring.datasource.max-wait=10000
これはもう効果がありません。
たとえば、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>
Spring Boot 2.xでは、プロバイダー固有のプロパティを参照する必要があります。
デフォルトのhikariは、spring.datasource.hikari.maximum-pool-size
で設定できます。
アプリケーションのタイプ/サイズ/負荷/いいえに基づきます。ユーザーの..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