Ich habe einen erholsamen Web-Service mit Play 2.5 Framework entwickelt. Ich möchte meinen Web-Service beim Start durch Aufruf selbst initiieren. Dies ist, um sicherzustellen, dass mein Service perfekt läuft.Play 2.5 Priming der Web-Service
Der Ansatz, den ich nehme, verwendet eagerBinding. Aber der Code innerhalb der Klasse mit injizierten eifrig Bindung ausgeführt wird, kurz bevor die App startet
Hier ist, was Code mein eagerbinding ist sieht aus wie
@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
}
}
Innen application.conf
play.modules.enabled += "util.ServiceInjectionModule"
Ich möchte Starten Sie meine Anwendung mit einem Dummy-Serviceanruf, sodass alle db-Verbindungen hergestellt werden, sobald der tatsächliche Datenverkehr beginnt. Momentan dauert mein erster api-Anruf viel länger als gewöhnlich. Welche anderen Optionen muss ich erreichen?
Warum sollte es das erste Modul sein? – rethab
@rethab Nur für den Fall, dass die Reihenfolge der Initialisierung wichtig ist ... – pamu
das ist richtig es funktioniert, ich musste meine Anwendung mit sbt kompilieren starten. aber das Problem ist, dass ich mich selbst nicht nennen kann, bevor der Dienst beginnt. Lass mich die Frage umformulieren. – konquestor