将连接推迟到application.conf中定义的数据源

时间:2013-04-15 16:39:58

标签: database scala configuration playframework app-config

假设我有一个名为“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获取相应的连接字符串。

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

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

有没有办法告诉Play延迟/推迟创建数据库连接,直到实际需要它为止(例如,当为该数据源调用DB.getConnection("...")DB.withConnection("...")时)? 我在想像db.awesome-live.deferCreation=true

干杯,亚历克斯

1 个答案:

答案 0 :(得分:1)

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

Play上解释了一切!文档:Additional configuration

指定备用配置文件

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