LoginSignup
12
12

More than 5 years have passed since last update.

playframeworkでslickを使ってDBにアクセする際にハマったのでメモ

Posted at

概要

playframeworkでslickを使ってDB(メモリ上)にアクセスする際にハマったのでメモ。
実際は、DBにアクセスするのにハマったというよりも、Injectさせようとしてハマったが正しい。

PlayFramework with scalaでDBにアクセスさせるため、いろいろ探しててslickってのがあると知ってそれを使ってみようと思った次第。

環境

version
scala 2.11.7
activator 1.3.7
slick(play-slick) 1.1.1

何が起きたか

とりあえず知っている知識とその辺りを説明してくださっているソースコードを読みながら写経してみた
play2.4.3 + slick 3.0備忘録
その時のapplication.confの一部とbuild.sbtの一部

application.conf
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play;MODE=MYSQL"
db.default.username=sa
db.default.password=""

play.evolutions.enabled=true
build.sbt
libraryDependencies ++= Seq(
  jdbc,
  "commons-io" % "commons-io" % "2.4",
  "com.typesafe.play" %% "play-slick" % "1.1.1",
  "com.typesafe.play" %% "play-slick-evolutions" % "1.1.1"
)

そのまま実行すると、以下の様なエラーが出た。
CreationException: Unable to create injector, see the following errors:

調べてみたら
https://playframework.com/documentation/ja/2.4.x/PlaySlickFAQ

にremove the Play jdbcとあるのでbuild.sbtから消してみる。

次は、以下のエラーが出た。
ProvisionException: Unable to provision, see the following errors:
No implementation for play.api.db.slick.DatabaseConfigProvider was bound.
while locating play.api.db.slick.DatabaseConfigProvider

Injectがうまくいってないみたいです。って言われた。
もう少し調べてみる。
https://playframework.com/documentation/ja/2.4.x/PlaySlickMigrationGuide
どうやらdb.defaultは無視されるようだ。代わりにslick.dbs.defaultのようだ。

すると次には
Error in custom provider, java.lang.RuntimeException: driverClassName specified class 'org.h2.Driver' could not be loaded

ほう、とさっきのページを見ると、driverがないので追加しろということなので追加する。

以上修正して、起動するとevolutionができるということが言われたのでよかったよかっためでたしめでたし

最終的にapplication.confとbuild.sbtの一部は以下のとおりになった。

build.sbt
libraryDependencies ++= Seq(
  "com.typesafe.play" %% "play-slick" % "1.1.1",
  "com.typesafe.play" %% "play-slick-evolutions" % "1.1.1",
  "com.h2database" % "h2" % "1.4.191"
)
application.conf
slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver=org.h2.Driver
slick.dbs.default.db.url="jdbc:h2:mem:play;MODE=MYSQL"
slick.dbs.default.db.user=sa
slick.dbs.default.db.password=""
12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12