Spring BootでHikariCPを使ってコネクションプールを設定する方法




コネクションプールについて

コネクションプールとは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アプリケーションにおいてコネクションプールはマストの設定なのでしっかりと学んでおくことをオススメします。

関連記事

おすすめ書籍

JPAに関して体系的に学べる良い書籍だと思います。良くあるSpring系書籍ですとJPAは少ししか紹介がありませんが丸々一冊JPAに関してなので詳細な解説がされています。内容はJPAと他のORMとの比較から始まりセットアップ、実装の仕方まで幅広く網羅されています。これからJPAで開発を初めてみようかなと考えている方は一読することをオススメします!

Springの概要からインストール方法、各コア機能(Security, Sessionなど)の解説が体系的にまとめられています。2018年に出版されたばかりなので情報も新しいです。これからSpring Bootでアプリケーション開発をしたい方の最初に読む一冊としておすすめします。対象は初心者だけでなく上級者まで幅広く学べるので是非読んでみてください!

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です