私はPlay 2.3.7でアプリケーションを書いていて、アクターを作成しようとしたとき(デフォルトを使って) Akka.system()
の中) beforeStart
のオーバーライドされたメソッド Global
オブジェクト、アプリケーションはいくつかの無限の再帰呼び出しでクラッシュします beforeStart
、最終的にのために例外をスローします Global
オブジェクトは初期化されていません。このアクターを内部に作成すると onStart
方法は、その後、すべてがうまくいきます。
私の「直感」は次のとおりです。 「このアクターはアプリケーションが最初のリクエストを受け取る前に準備ができている必要があります beforeStart
、 ありませんで onStart
".
時である Akka.system()
使用する準備ができて?
回答:
回答№1は2Akka.system
返す ActorSystem
によって開催された AkkaPlugin
。したがって、あなたがそれを使いたいのであれば、あなたはそれをしなければならない。 AkkaPlugin
初期化されました。の AkkaPlugin
これは他のほとんどの内部プラグイン(データベース、進化など)の後に開始されることを意味します。の Global
プラグインの優先順位は10000です。 AkkaPlugin
そこで利用可能です(そして優先度> 1000を持つすべてのプラグインのために)。
に関するドキュメントの警告に注意してください。 beforeStart
:
アプリケーションが起動する前に呼び出されます。
データベース接続など、プラグインによって管理されているリソースは、現時点では利用できない可能性があります。
回答№2については2
あなたはこれを始めなければなりません onStart()
なぜなら beforeStart()
Akka(これは実際にはプラグインです)やデータベース接続が作成される前の早い時期に呼び出されます実際には、 のドキュメント GlobalSettings
州:
データベース接続など、プラグインによって管理されているリソースは、現時点では利用できない可能性があります。
一般的なガイダンス(このスレッドで確認)それは onStart()
アクターを作成する場所です。そして実際には、それは私にとってもうまくいった。