Play-Slick 如何从 conf 创建 play.api.db.Database 实例?
Play-Slick how to create play.api.db.Database instance from conf?
我正在使用 Slick 3.1.1 和 Play 2.5.10,并且具有以下 application.conf
:
slick.dbs {
default {
driver="slick.driver.PostgresDriver$"
db.driver="org.postgresql.Driver"
db.url="jdbc:postgresql://localhost:5432/exampledb?searchpath=public"
db.user="postgres"
db.password="postgres"
}
test {
driver="slick.driver.H2Driver$"
db.driver="org.h2.Driver"
db.url="jdbc:h2:mem:test;MODE=PostgreSQL"
db.username="sa"
db.password=""
}
}
为了测试我的 Daos,我想使用进化创建一个测试数据库,所以我这样做:
package dao
import org.scalatest.BeforeAndAfter
import play.api.db.evolutions.Evolutions
trait BeforeAndAfterDao extends BeforeAndAfter {
before {
Evolutions.applyEvolutions("test") // <<< doesn't compile, needs Database instance
}
after {
Evolutions.cleanupEvolutions("test") // <<< doesn't compile, needs Database instance
}
}
但不幸的是我需要创建一个 play.api.db.Database
来传递给 apply/cleanupEvolutions
。如何从 application.conf
?
构建所需的数据库实例
好吧,您可以分两步手动完成。
第一步:
我假设您已经在某处安装了 Config
,因此您可以像这样注入它:
@Inject()(config: Config)
如果你不这样做(你通常总是有,因为大多数时候你需要从中读取一些东西)你总是可以按如下方式公开它(在你的注射器内 Module
):
bind[Config].to(ConfigFactory.load("application.conf")).in(classOf[Singleton])
然后:
val driver = config.getString("slick.dbs.default.db.driver")
val url = config.getString("slick.dbs.default.db.url")
val user = config.getString("slick.dbs.default.db.user")
val password = config.getString("slick.dbs.default.db.password")
第二次创建数据库:
val db = Databases(driver, url,
config = Map("username" -> user,
"password" -> password))
我正在使用 Slick 3.1.1 和 Play 2.5.10,并且具有以下 application.conf
:
slick.dbs {
default {
driver="slick.driver.PostgresDriver$"
db.driver="org.postgresql.Driver"
db.url="jdbc:postgresql://localhost:5432/exampledb?searchpath=public"
db.user="postgres"
db.password="postgres"
}
test {
driver="slick.driver.H2Driver$"
db.driver="org.h2.Driver"
db.url="jdbc:h2:mem:test;MODE=PostgreSQL"
db.username="sa"
db.password=""
}
}
为了测试我的 Daos,我想使用进化创建一个测试数据库,所以我这样做:
package dao
import org.scalatest.BeforeAndAfter
import play.api.db.evolutions.Evolutions
trait BeforeAndAfterDao extends BeforeAndAfter {
before {
Evolutions.applyEvolutions("test") // <<< doesn't compile, needs Database instance
}
after {
Evolutions.cleanupEvolutions("test") // <<< doesn't compile, needs Database instance
}
}
但不幸的是我需要创建一个 play.api.db.Database
来传递给 apply/cleanupEvolutions
。如何从 application.conf
?
好吧,您可以分两步手动完成。
第一步:
我假设您已经在某处安装了 Config
,因此您可以像这样注入它:
@Inject()(config: Config)
如果你不这样做(你通常总是有,因为大多数时候你需要从中读取一些东西)你总是可以按如下方式公开它(在你的注射器内 Module
):
bind[Config].to(ConfigFactory.load("application.conf")).in(classOf[Singleton])
然后:
val driver = config.getString("slick.dbs.default.db.driver")
val url = config.getString("slick.dbs.default.db.url")
val user = config.getString("slick.dbs.default.db.user")
val password = config.getString("slick.dbs.default.db.password")
第二次创建数据库:
val db = Databases(driver, url,
config = Map("username" -> user,
"password" -> password))