HikariCPとldbcの連携
はじめに
HikariCPは、Javaのデータベースコネクションプールライブラリとしてもっとも広く使用されているライブラリの一つです。 ldbcではHikariCPと組み合わせることで、効率的なデータベース接続の管理が可能になります。
依存関係の追加
まず、build.sbtに必要な依存関係を追加します:
libraryDependencies ++= Seq(
"com.mysql" % "mysql-connector-j" % "8.4.0",
"com.zaxxer" % "HikariCP" % "6.2.1"
)
HikariCPの基本設定
HikariCPには多くの設定オプションがあります。以下に主要な設定項目を示します:
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
val config = new HikariConfig()
config.setJdbcUrl("jdbc:mysql://localhost:3306/database")
config.setUsername("username")
config.setPassword("password")
// コネクションプールの基本設定
config.setMaximumPoolSize(10) // 最大プールサイズ
config.setMinimumIdle(5) // 最小アイドル接続数
config.setConnectionTimeout(30000) // 接続タイムアウト(ミリ秒)
config.setIdleTimeout(600000) // アイドルタイムアウト(ミリ秒)
val dataSource = new HikariDataSource(config)
ldbcとの連携例
以下は、HikariCPとldbcを組み合わせた基本的な使用例です:
import cats.effect.*
import com.zaxxer.hikari.HikariDataSource
import ldbc.dsl.*
import ldbc.dsl.codec.Codec
import jdbc.connector.*
// データモデルの定義
case class User(id: Int, name: String, email: String)
object User:
given Codec[User] = Codec.derived[User]
object HikariExample extends IOApp.Simple:
def run: IO[Unit] =
// HikariCPの設定
val ds = new HikariDataSource()
ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb")
ds.setUsername("user")
ds.setPassword("password")
// コネクションの確立
val program = for
hikari <- Resource.fromAutoCloseable(IO(ds))
execution <- ExecutionContexts.fixedThreadPool[IO](10)
connection <- ConnectionProvider.fromDataSource[IO](hikari, execution).createConnection()
yield connection
// クエリの実行
program.use { conn =>
for
users <- sql"SELECT * FROM users".query[User].to[List].readOnly(conn)
_ <- IO.println(s"Found users: $users")
yield ()
}
高度な設定例
HikariCPには、パフォーマンスチューニングのための様々な設定があります:
val config = new HikariConfig()
// 基本設定
config.setPoolName("MyPool") // プール名の設定
config.setAutoCommit(false) // 自動コミットの無効化
// パフォーマンス設定
config.setMaxLifetime(1800000) // 接続の最大生存時間(30分)
config.setValidationTimeout(5000) // 接続検証のタイムアウト
config.setLeakDetectionThreshold(60000) // 接続リーク検出のしきい値
// MySQLに特化した設定
config.addDataSourceProperty("cachePrepStmts", "true")
config.addDataSourceProperty("prepStmtCacheSize", "250")
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048")
まとめ
HikariCPとldbcを組み合わせることで、以下のような利点が得られます:
- 効率的なコネクションプーリング
- トランザクション管理の簡素化
- 型安全なクエリ実行
- Cats Effectを活用した純粋関数型プログラミング
適切な設定とエラーハンドリングを行うことで、安定した高パフォーマンスのデータベースアクセスが実現できます。