假设我有一个名为“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
。
干杯,亚历克斯
答案 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