有没有办法更改默认evolutions目录位置?我需要这个,因为我有以下几个非常罕见的用例:
default
数据库Postgres evolutions/default/1.sql
是便携式的(Postgres& H2)evolutions/default/2.sql
是非便携式Postgres脚本1.sql
和2.sql
1.sql
有没有办法使用application.conf
或某些sbt
设置alla例如。
javaOptions in Test += "-Dconfig.file=conf/application.test.conf"
能否更改test
的默认演变目录?
如果我能说,我的OP将会解决,例如(理论上没有用!)
javaOptions in Test += "-Devolutions.prefix=conf/testdatabase/"
然后:
conf/
evolutions/default/1.sql
2.sql
testdatabase/evolutions/default/1.sql -> ../../../evolutions/default/1.sql
对于我不知道的任何其他解决方案,我会很高兴......只要它有效:)
答案 0 :(得分:4)
在测试配置文件中,通过添加此行来关闭默认的ev演变应用程序。
ListView
在测试文件中定义一个辅助方法,在调用时将应用Evolutions。
# Evolutions should not be applied by default
play.evolutions.db.default.enabled = false
然后在您的测试中覆盖import play.api.db.Database
import play.api.db.evolutions.{DatabaseEvolutions, EvolutionsReader, ThisClassLoaderEvolutionsReader}
def applyEvolutions(database: Database,
evolutionsToSkip: Seq[Int],
evolutionsReader: EvolutionsReader = ThisClassLoaderEvolutionsReader,
autocommit: Boolean = true,
schema: String = ""): Unit = {
val dbEvolutions = new DatabaseEvolutions(database, schema)
val evolutions = dbEvolutions.scripts(evolutionsReader).filterNot(s => evolutionsToSkip.contains(s.evolution.revision))
dbEvolutions.evolve(evolutions, autocommit)
}
和beforeAll
方法:
afterAll
您可以按如下方式访问数据库:
override def beforeAll(): Unit = {
applyEvolutions(database, Seq(2))
}
override def afterAll(): Unit = {
Evolutions.cleanupEvolutions(database)
}