コネクションプールについて
コネクションプールとはWEBサーバがDBサーバに対して作ったコネクションを使いませるようにコネクションをためておくことを言います。
コネクションを作成するのはオーバーヘッドが大きく大量のアクセスがあった際に都度コネクションを生成していると遅延が発生してしまったり、DBサーバのポートが枯渇してしまうという問題が発生します。
なので、一度作ったコネクションを使いまわすことでコネクション作成にかかるオーバーヘッドを減らし、遅延なくアクセスをさばくことができるようになります。
Spring Bootでコネクションプールの設定
環境
- Spring Boot:1.5.6.RELEASE
- Spring Data JPA:1.11.7.RELEASE
設定方法
Spring Bootでコネクションプールを使うならHikariCPが今のトレンドみたいなのでこれを使います。公式ドキュメントでもHikariCPがオススメされています。
設定方法は簡単でapplication.yamlに下記を設定するだけです。
古いバージョンのSpring Bootではtomcat-JDBCを除外しないと行けなかったみたいですが最近のバージョンではそのような手間がいらなくなりました。
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/sampledb username: username password: password validationQuery: SELECT 1 testOnBorrow: true type: com.zaxxer.hikari.HikariDataSource hikari: pool-name: ConnectionPool leakDetectionThreshold: 5000 connection-test-query: SELECT 1 minimum-idle: 5 maximum-pool-size: 10 auto-commit: false
typeを指定することでHikariCPを使う設定になります。
また、デバッグで重要になるのがleakDetectionThresholdです。これは使用したコネクションが指定したms以内にプールに戻されないと検知してエラーにしてくれます。
これを指定しておくことでコネクションの扱いがおかしいところを見つけることができます。自分はこの設定のおかげて正しく実装することができました。
注意点
DBへの接続設定としてDataSourceをプログラム上で実装することがあると思いますがその時にDriverManagerDataSourceを使わないようにしてください。これはテスト用に用意されているだけでコネクションプールの機能がないからです。
ネット上にある多くのサンプルでプログラムでこのクラスが使われており自分も間違って使っていました。Spring Bootでは必ずHikariCPを使ってください。
まとめ
コネクションプールと聞くと実装が大変そうなイメージを持ちますが、Spring Bootなら設定ファイルを記述するだけで簡単にコネクションプールを実現できます。
WEBアプリケーションにおいてコネクションプールはマストの設定なのでしっかりと学んでおくことをオススメします。
関連記事
- Spring BootとJPAで複数データベースを扱う実装方法
- Spring SecurityでCORSの設定を行う
- Spring Data JPAでカスタムRepositoryインターフェースを実装する方法
おすすめ書籍
JPAに関して体系的に学べる良い書籍だと思います。良くあるSpring系書籍ですとJPAは少ししか紹介がありませんが丸々一冊JPAに関してなので詳細な解説がされています。内容はJPAと他のORMとの比較から始まりセットアップ、実装の仕方まで幅広く網羅されています。これからJPAで開発を初めてみようかなと考えている方は一読することをオススメします!
Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す