HikariDataSourceのままDataSourceconnectionPoolに渡してしまえばOK
基本的な書き方は以下のとおり
import javax.sql.DataSource
import scalikejdbc._
import com.zaxxer.hikari._
class Sample {
ConnectionPool.add('master, new DataSourceConnectionPool(getDataSource))
def getDataSource: javax.sql.DataSource = {
val host = "localhost"
val port = 3306
val database = "master"
val user = "foobar"
val password = "foobar"
val dataSourceClassName = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
val ds = new HikariDataSource()
ds.setDataSourceClassName(dataSourceClassName)
ds.addDataSourceProperty("url", s"jdbc:mysql://$host/$database")
ds.addDataSourceProperty("user", user)
ds.addDataSourceProperty("password", password)
ds
}
// あとはScalikeJDBCを使う
def findAll = {
val result = NamedDB(Symbol("master")) readOnly { implicit session =>
Hogehoge.findAll
}
}
}
HikariDataSourceオブジェクトを作成してConnectionPool
に登録。
scalikejdbcでborrowする。
ハマりポイント
dataSourceClassNameを設定しないとうまくいかない。ds.setDataSourceClassName(dataSourceClassName)
が必要。
MySQLへの接続がうまくいっていないとborrowするときに NullPointerException が発生する。スタックトレースを見ても何故発生しているのかわからなかった。。。(´・_・`)
いろいろ試してみた結果 dataSourceClassName が必要みたい。