play-hikaricpの設定周りについて調べてみた

Play2に標準でついてるBoneCPがいつまで経ってもバグっているので、Play標準のdbpluginを無効化しplay-hikaricpを使っているのですが、設定周りで若干謎な部分があったので調べてみました。

対象はplay-hikaricp 1.2.0、HikariCP 1.3.8です。

前提として、HikariCPの設定はhikaricp.propertiesではなくPlayのapplication.confで行っています。これはHikariCP以外の設定も含め-Dconfig.reourceや-Dconfig.fileで実行時に環境に応じて設定の切り替えを行えるようにするためです。

まず、HikariCPはパーテーショニング機能がないので単純にpartitionCount×maxConnectionsPerPartitionのコネクションを1つのプールで管理する形になります。partitionCountは1にしてしまったほうがよいかもしれません。また、partitionCount×minConnectionsPerPartitionはminIdleにマッピングされますが、application.conf経由の場合isInitializationFailFastをtrueに設定することができないので初期化時に必ずmax分のコネクションが確保されます(trueに設定するとminIdle分のコネクションのみ確保されます)。

ちなみにplay-hikaricpはapplication.confから以下のプロパティを読み取っています。HikariCPにはこの他にもいくつかの設定項目がありますが、application.confでHikariCPの設定を行う場合これ以外のプロパティを設定しても無意味ということになります。

  • driver
  • url
  • user
  • password
  • maxConnectionAge
  • defaultReadOnly
  • acquireRetryDelay
  • statisticsEnabled
  • initSQL
  • partitionCount
  • minConnectionsPerPartition
  • maxConnectionsPerPartition

ただし、以下のプロパティはhikari-play-pluginでは読み取っていますが、HikariCP側では使われていません。

  • acquireRetryDelay

なお、db.default.hikaricp.fileというプロパティを使用するとHikariCPの設定をapplication.confから外部化することができます。この場合はapplication.confから設定をマッピングするのではなく、HikariCPの設定を直接プロパティファイルに記述できるようになります。設定のマッピングや差分を考えなくて済むのでplay-hikaricp的にもこちらの方法を推奨しているようです。