Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

概要

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=""
SatohJohn
簡単に短くをもっとうに書く予定です。
furyu
プリ機やWEBサービス、ゲームなど様々なジャンルの開発をしています。人々のこころを豊かで幸せにする良質なエンタテインメントを創出していきます!
http://www.furyu.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away