我使用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我想使用evolutions创建一个测试数据库,所以我这样做:
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
?
答案 0 :(得分:1)
嗯,你可以分两步手动完成。
第一步:
我假设您已经在某个地方拥有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))