Ich habe eine Konfigurationsdatei servers.conf
in meinem conf/
Verzeichnis, das von meinem ServerController gelesen wird, wenn die Route /servers
getroffen wird. Dies ist nicht performant, da bei jedem weiteren Treffer ein erneutes Lesen der Konfigurationsdatei erforderlich ist, wenn sich die Datei nicht ändert. Wenn es Probleme mit der Konfigurationsdatei gibt, kann ich den Benutzer so schnell wie möglich informieren, anstatt eine Ausnahme bei einem Seitentreffer auszulösen.Wie führe ich eine Aktion beim Serverstart im Scala Play Framework durch?
Zur Zeit habe ich dies in meinem ServerController.scala
:
case class Server(ip: String, port: String)
/**
* This controller creates an `Action` to handle HTTP requests to the
* application's server page.
*/
@Singleton
class ServerController @Inject() extends Controller {
/**
* Create an Action to render an HTML page with a the list of servers.
* The configuration in the `routes` file means that this method
* will be called when the application receives a `GET` request with
* a path of `/servers`.
*/
def index = Action {
val serverList = ConfigFactory.load().getConfigList("servers")
val servers: List[Server] = serverList match {
case null => Nil
case _ => serverList map { s =>
Server(s.getString("ip"), s.getString("port"))
} filter { s =>
s.ip != null && s.port != null
}.toList
}
Ok(views.html.servers(servers))
}
}
Mein Ziel ist der Server die Konfiguration haben Datei beim Start und übergeben Sie die Liste der Server an die ServerController lesen, wenn die Route getroffen wird, wenn es keine ist Probleme beim Lesen in der Konfigurationsdatei. Wenn es Probleme gibt, möchte ich sofort eine Ausnahme auslösen.
Ich kann jedoch keinen Einstiegspunkt für meine Anwendung finden, daher weiß ich nicht, wie ich beim Start Aktionen ausführen soll.
Weiß jemand, wie man das macht? Ich benutze Play 2.5.x.
Welche Version von Play verwenden Sie? – Anton
@Anton Entschuldigung. Bearbeitete die Frage. – erip
Haben Sie darüber nachgedacht, den gesamten Codeblock außerhalb der Indexfunktion zu platzieren? (Es wird ausgeführt, wenn der Controller nur einmal gestartet wird, d. H. Eine HTTP-Anfrage an diesen Controller) – dlite922