Playframework 2.5 Slick + DI
Playframework 2.5 Slick + DI
我正在使用 playframework 2.5 和 play slick
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(
cache,
ws,
"org.scalatestplus.play" %% "scalatestplus-play" % "1.5.0-RC1" % Test,
"com.madgag.spongycastle" % "core" % "1.53.0.0",
"org.flywaydb" %% "flyway-play" % "3.0.0",
"com.typesafe.play" %% "play-slick" % "2.0.0",
"com.typesafe.play" %% "play-slick-evolutions" % "2.0.0"
)
resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"
fork in run := false
并尝试使用 Play 官方推荐的 DI 实现基本的 CRUD class。
trait FooService {
def findById(id: Long)
final class FooTable(tag: Tag) extends Table[FooModel](tag,"foo"){
def id = column[Long]("id")
//....
}
}
@Singleton
class FooServiceImpl @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends FooService with HasDatabaseConfigProvider[JdbcProfile] {
import dbConfig.driver.api._
private lazy val bars = TableQuery[FooTable]
def findById(id: Long) = db.run(bars.filter{ x => x.id === id}.result)
//....
}
Module.scala
override def configure() = {
//....
bind(classOf[FooService]).to(classOf[FooServiceImpl])
//....
}
application.conf
slick.dbs.default.driver = "slick.driver.MySQLDriver$"
slick.dbs.default.db.driver = com.mysql.jdbc.Driver
slick.dbs.default.db.url = "jdbc:mysql://localhost/foo"
slick.dbs.default.db.user = "root"
slick.dbs.default.db.password = "password"
我收到一个错误 Caused by: java.lang.RuntimeException: driverClassName specified class 'com.mysql.jdbc.Driver' could not be loaded
,上面 codes/setting
如果我将 slick.dbs.default.db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
添加到 application.conf,错误就会消失,但我会得到 DB Timeout 异常。
由于我的其他 play2.4 项目(非 DI)可以连接到具有相同配置设置的服务器,而且我也可以连接到控制台中的服务器,所以我 crystal 确定 Db 配置是正确。
我不知道是什么原因导致了这个问题。我哪里做错了?
提前致谢。
您需要添加 mysql 驱动依赖:
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.38"
当然,检查这个版本(最新)是否可以,或者您是否需要另一个。
我正在使用 playframework 2.5 和 play slick
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.7"
libraryDependencies ++= Seq(
cache,
ws,
"org.scalatestplus.play" %% "scalatestplus-play" % "1.5.0-RC1" % Test,
"com.madgag.spongycastle" % "core" % "1.53.0.0",
"org.flywaydb" %% "flyway-play" % "3.0.0",
"com.typesafe.play" %% "play-slick" % "2.0.0",
"com.typesafe.play" %% "play-slick-evolutions" % "2.0.0"
)
resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"
fork in run := false
并尝试使用 Play 官方推荐的 DI 实现基本的 CRUD class。
trait FooService {
def findById(id: Long)
final class FooTable(tag: Tag) extends Table[FooModel](tag,"foo"){
def id = column[Long]("id")
//....
}
}
@Singleton
class FooServiceImpl @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends FooService with HasDatabaseConfigProvider[JdbcProfile] {
import dbConfig.driver.api._
private lazy val bars = TableQuery[FooTable]
def findById(id: Long) = db.run(bars.filter{ x => x.id === id}.result)
//....
}
Module.scala
override def configure() = {
//....
bind(classOf[FooService]).to(classOf[FooServiceImpl])
//....
}
application.conf
slick.dbs.default.driver = "slick.driver.MySQLDriver$"
slick.dbs.default.db.driver = com.mysql.jdbc.Driver
slick.dbs.default.db.url = "jdbc:mysql://localhost/foo"
slick.dbs.default.db.user = "root"
slick.dbs.default.db.password = "password"
我收到一个错误 Caused by: java.lang.RuntimeException: driverClassName specified class 'com.mysql.jdbc.Driver' could not be loaded
,上面 codes/setting
如果我将 slick.dbs.default.db.dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
添加到 application.conf,错误就会消失,但我会得到 DB Timeout 异常。
由于我的其他 play2.4 项目(非 DI)可以连接到具有相同配置设置的服务器,而且我也可以连接到控制台中的服务器,所以我 crystal 确定 Db 配置是正确。
我不知道是什么原因导致了这个问题。我哪里做错了?
提前致谢。
您需要添加 mysql 驱动依赖:
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.38"
当然,检查这个版本(最新)是否可以,或者您是否需要另一个。