2

マイプレイ!2.0.4 Web アプリケーションは現在、次のような構成ファイルを使用して、複数の RDS MySQL データベースに接続しています。

    # Africa
    db.afr.url="jdbc:mysql://<africa-server>:3306/users"
    db.afr.driver=com.mysql.jdbc.Driver
    db.afr.user=user1
    db.afr.password=****
    db.afr.logStatements=true

    # Europe
    db.eur.url="jdbc:mysql://<europe-server>:3306/users"
    db.eur.driver=com.mysql.jdbc.Driver
    db.eur.user=user1
    db.eur.password=****
    db.eur.logStatements=true

これは、すべてのデータベースが実行されている間、完全に機能します。ただし、データベースの 1 つがダウンしている場合 (何らかの理由で)、アプリケーション全体が失敗し、構成エラー (データベースに接続できません [afr]) がスローされます。

サーバーを完全に強制終了するのではなく、起動時に構成エラーをキャッチしてこれらのメッセージを無視/ログに記録するにはどうすればよいですか? Global.java の onError() オーバーライドの使用を検討しましたが、運がありません。

ありがとう、デビッド

4

1 に答える 1

0

これが私がやったことです。素晴らしい解決策ではありませんが、おそらく問題ない回避策です。

play.api.db.BoneCPPlugin の内容を、クラス名 SafeDBPlugin を持つ独自のファイル SafeDBPlugin.scala にコピーします。パッケージ play.api.db に含まれている必要があります (ただし、通常どおり、コード ベース内の任意の場所にファイルを配置できます)。重要な部分は、構成エラーを報告する onStartup() メソッドの行を変更し、それを logger.warn() に変更することです。

次の行を application.conf に追加して、組み込みの dbplugin (BoneCPPlugin) を無効にします。

dbplugin=disabled

次の行を play.plugins に追加して、新しいプラグインを追加します。

600:play.api.db.SafeDBPlugin
于 2013-10-29T21:24:14.187 に答える