のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

<Scala>SlickでHikariCPのコネクションプールを使用する

具体的にやること

以下の環境で実行する

  • Scala(2.11系)
  • slick(3.0.0)
  • h2(1.4.199)

マルチスレッドの場合、スレッドプールのサイズはパフォーマンスに影響するため慎重に決定する必要があるが、今回は議論しない。

依存ファイルを追加する

sbtプロジェクトなので、以下のようにsbtに対してライブラリを追加する。

// バージョンは自身のslickのバージョンに合わせる。(今回はslick3.0.0を使用)
  "com.typesafe.slick" %% "slick-hikaricp" % "3.3.0"

HikariCP使用のための実装

HikariConfigに設定を保存する。

具体的な項目は以下が参考になる。 github.com

今回はmapでconfigを定義し、dbインスタンスに読み込ませる方針とする。

import com.typesafe.config.ConfigFactory
import slick.jdbc.H2Profile.api._
import scala.collection.JavaConverters._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}

val hikariConf = ConfigFactory.parseMap(
    Map("h2" ->
      Map(
        "url" -> ("jdbc:h2:" + databasePath),
        "driver" -> "org.h2.Driver",
        "connectionPool" -> "HikariCP",
        "numThreads" -> 5,
        "poolSize" -> 20,
        "queueSize" -> -1,
        "keepAliveConnection" -> true
      ).asJava
    ).asJava
  )

val db :Database = Database.forConfig("h2", config = hikariConf)

// 以降でCRUD処理記述

諸注意

基本的には詳しい説明を書かないが、typesefeConfigを使用する場合は、javaのコレクションのに変換するために、.asJava()メソッドを使用していることに注意したい。 これはimport scala.collection.JavaConverters._によってimportしているメソッドである。 ここらへんの話は以下を参考にされたい。

docs.scala-lang.org

最後に

以上で基本的な使用に関する設定は完了となる。 またSlickの使用方法なども資料が古くなっていたので別途自分でまとめ直したい。

参考

github.com

www.baeldung.com