1

假设我有一个名为“awesome”的数据库,它位于实时服务器上,同时在登台服务器上复制以进行测试。我的网络应用程序基于使用 Scala 的 Play 2.1.1。
所以我在application.conf文件中定义了这些数据源:

db.awesome-test.driver= com.mysql.jdbc.Driver
db.awesome-test.url="jdbc:mysql://127.0.1.1/awesome"
db.awesome-test.user=mr_awesome_tester
db.awesome-test.password=justtesting

db.awesome-live.driver= com.mysql.jdbc.Driver
db.awesome-live.url="jdbc:mysql://127.0.0.1/awesome"
db.awesome-live.user=mr_awesome
db.awesome-live.password=omgthisisawesome

根据我所处的环境,我想使用DB.withConnection("awesome-test")DB.withConnection("awesome-live")。我通过配置中的另一个值来控制它;所以我例如放在environment=awesome-live那里,然后通过Play.configuration.

现在,问题是显然 play 尝试立即创建与配置中定义的每个数据源的数据库连接。A)这取决于我所处的环境。例如在登台机器上我会得到这样的东西(当然图片只是一个模型),因为无法访问实时数据库:

...尽管完全没有必要尝试连接到该数据库,因为它永远不会在这种环境中使用。B)即使连接可以工作,当然当只需要两个连接中的一个时创建两个连接(实时和测试)是不可行的。

有没有办法告诉 Play 推迟/推迟数据库连接的创建,直到它真正需要它(例如,何时DB.getConnection("...")DB.withConnection("...")某事为该数据源调用)?我在想类似的东西db.awesome-live.deferCreation=true

干杯,亚历克斯

4

1 回答 1

1

我会说你有两种方法可以做到这一点。

一切都在戏剧中解释!文档:附加配置

指定替代配置文件

test.conf

db.awesome.driver= com.mysql.jdbc.Driver
db.awesome.url="jdbc:mysql://127.0.1.1/awesome"
db.awesome.user=mr_awesome_tester
db.awesome.password=justtesting

live.conf

db.awesome.driver= com.mysql.jdbc.Driver
db.awesome.url="jdbc:mysql://127.0.0.1/awesome"
db.awesome.user=mr_awesome
db.awesome.password=omgthisisawesome

在代码中你总是使用DB.withConnection("awesome").

启动应用程序

$ start -Dconfig.resource=test.conf

或者

$ start -Dconfig.resource=live.conf

覆盖特定的配置键

在您的情况下,这意味着:

$ start -Ddb.awesome-live.deferCreation=true
于 2013-04-16T07:15:09.803 回答