好吧,你的问题有点不同(或者可能有点出乎意料)。这是导致您头痛的一行:
dbApi.databases().foreach(runEvolutions)
其在:
ApplicationEvolutions.scala:42
这可能是不言而喻的:)
然而,问题更加复杂。测试环境中实际上有两个数据库(
default
和
test
). 现在,这导致了几个问题,其中一个问题您可以在上面看到(在每个问题上都尝试了进化)。另一个原因是,如果你想使用不同名称的db,你不能只注入这样的东西:
class UserDao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)
相反,您需要使用(AFAIR):
class UserDao @Inject()(@NamedDatabase("test") protected val dbConfigProvider: DatabaseConfigProvider)
但在这种情况下,测试变得更加复杂。
如果:
1) 您可以将公共配置提取到
common.conf
2) 你会改变你的
application.conf
像这样:
include "common.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"
}
}
3) 你会改变你的
application.test.conf
像这样:
include "common.conf"
slick.dbs {
default {
driver="slick.driver.H2Driver$"
db.driver="org.h2.Driver"
db.url="jdbc:h2:mem:test;MODE=PostgreSQL"
db.username="sa"
db.password=""
}
}
现在唯一的问题是你应该有一组进化(
违约
)这实际上并没有那么糟糕,因为它可以确保测试数据库与生产数据库同步(至少在结构方面)。
这并不是说以上是唯一的解决方案。您仍然可以有两种不同名称的db配置;在这种情况下,您需要在应用程序中进行某种重新映射
Guilce module
(然后,您将有一个用于prod的模块和一个用于test的模块——它们可以相互继承,只覆盖某些内容——例如,附加)
测验
db代替默认值)。这基本上是一个品味的问题。