1

「awesome」という名前のデータベースがライブ サーバー上にあり、同時にテスト用にステージング サーバー上に複製されているとします。私の Web アプリは、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 が config で定義された各データソースへの DB 接続をすぐに作成しようとすることです。A) これは、使用している環境によっては失敗します。たとえば、ステージング マシンでは、ライブ DB に到達できないため、次のような結果が得られます (写真はもちろんモックアップにすぎません)。

...ただし、この環境では使用されることはないため、その DB に接続する必要はまったくありません。B) 接続が機能したとしても、2 つの接続 (ライブとテスト) のうちの 1 つだけが必要な場合に、2 つの接続を作成することはもちろん実現可能ではありません。

実際に必要になるまで (たとえば、そのデータソースに対してまたは何かが呼び出された場合)、DB 接続の作成を延期/延期するように Play に指示する方法はありDB.getConnection("...")ますDB.withConnection("...")か? のようなことを考えていdb.awesome-live.deferCreation=trueます。

乾杯、アレックス

4

1 に答える 1