私はplay 2.5フレームワークを使用して快適なWebサービスを開発しました。 私は自分自身を呼び出すことによって、自分のWebサービスを初めにプライムしたいと思っています。これは私のサービスが完全に稼働していることを確認するためです。Play 2.5 Webサービスのプライミング
私が取っているアプローチはeagerBindingです。しかし、クラス内のコードは、使用して注入された熱心なアプリが
ここは私eagerbindingコードは、私がしたいapplication.conf
play.modules.enabled += "util.ServiceInjectionModule"
インサイド
@Singleton
class PrimingMe @Inject()(ws: WSClient) {
isServicePrimed
def isServicePrimed: Boolean = {
println("PRIME ME!!!")
val response = ws.url("http://localhost:9000/index").get
.map {
response =>
response.status match {
case 200 => true
case _ => false
}
}
try {
Await.result(response, 5.second)
} catch {
case _ => false
}
}
}
class ServiceInjectionModule extends AbstractModule {
def configure(): Unit = {
bind(classOf[PrimingMe]).asEagerSingleton
}
}
次のようになります開始される直前に実行されますバインディング実際のトラフィックが始まったときにすべてのdb接続が行われるように、ダミーのサービスコールで私のアプリケーションをプライムしてください。現在、サービスへの私の最初のAPIコールは、通常よりもはるかに長い時間がかかります。私はこれを達成するために他にどのような選択肢がありますか?
なぜ最初のモジュールである必要がありますか? – rethab
@rethabちょうど初期化の順序問題の場合... – pamu
それは正しく動作し、私はsbtコンパイルの開始で私のアプリケーションを起動しなければならなかった。しかし、問題は、私がこのサービスの開始直前に「自分」と呼ぶことができないということです。私は質問を言い換えることができます。 – konquestor