我有一个Play Framework 2.1应用程序,数据库代码位于子项目中 - 以防我希望将来支持多种后端,例如基于文件的数据库或Cassandra。
但是,目前,数据库是一个关系数据库,我想使用Play's database evolutions机制。但是我不知道如何,或者甚至可能将evolutions脚本放在我的子项目中(它们属于哪个),而不是在主项目中。 - 如果我将它们放在sup项目中,Play显然会忽略它们。问题:我可以将我的evolutions脚本放在我的子项目中,我该怎么做?
编辑 2015年10月:我现在使用FlywayDB代替Play的内置演变,一年左右。我衷心推荐FlywayDB。您可以以任何您想要的方式使用FlywayDB在子项目中进行演变,并且您需要编写自己开始演变的代码。 /编辑
这是我到目前为止所尝试的:
创建子项目./modules/evolutions-test/
在该子项目中,创建一个evolutions脚本:
./modules/evolutions-test/conf/evolutions/default/1.sql
不要在子项目中配置数据库连接信息 - 显然, 这些设置被忽略(?)。在main中配置连接信息 改为使用项目配置文件,例如:
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://192.168.0.123/test_evolutions"
db.default.user=test_evolutions
db.default.password=...
包含JDBC和PostgreSQL驱动程序作为子项目的依赖项。
我的主项目是否依赖于子项目
(并在Play的控制台中点击reload
。)
这并没有让Play意识到要在子项目中应用evolutions脚本。相反,Play会查找并使用位于主项目conf
目录中的任何evolutions脚本。所以我想我可以从主项目软链接到子项目,并以这种方式仍然保留子项目中的进化脚本的内容。
(我在下面回答了我自己的问题,因为一旦我写完这个问题,我现在可能会发布所有这些问题 - 它实际上应该对其他人有用吗?不应该有多少人人们考虑将数据库代码放在子模块中?) 子>
答案 0 :(得分:2)
目前还不可能?请参阅:
https://groups.google.com/d/msg/play-framework/548JUZnjStE/x1hbXyc7PQwJ
这是关于如何以某种方式“修复”的讨论。
相反,我可以从中软链接
<main-project>/conf/evolutions/default
到
<main-project>/modules/evolutions-test-project/conf/evolutions/default