Wie kann ich eine Aktion ausführen auf server startup in die Scala, Play Framework?

Habe ich eine config-Datei servers.conf in meinem conf/ - Verzeichnis, das Lesen von meinem ServerController, wenn die route /servers ist der hit. Das ist nicht performant, weil es erfordert ein neu-Einlesen der Konfiguration-Datei auf jedem aufeinander folgenden Treffer, wenn die Datei nicht ändern. Weiter, wenn es Probleme mit der config-Datei, ich kann sagen, den user so schnell wie möglich, anstatt eine exception zu werfen auf eine Seite schlagen.

Derzeit habe ich diese 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 es, den server, Lesen Sie die config-Datei beim Start und übergeben Sie die Liste der Server, auf den ServerController, wenn die route wird geschlagen, wenn es keine Probleme beim Lesen in der config-Datei. Wenn es Probleme gibt, will ich eine Ausnahme geworfen werden, sofort.

Ich kann nicht scheinen zu finden, die einen Ansatzpunkt für meine Anwendung, obwohl, also ich weiß nicht, wie Aktionen auf starten.

Weiß jemand, wie dies zu tun? Ich bin mit Spielen 2.5.x.

  • Welche version des Spiels benutzt du?
  • Sorry. Bearbeitet die Frage.
  • Haben Sie in Betracht ziehen, dass ein ganzer block von code außerhalb der Funktion index? (Es wird ausgeführt, wenn der Controller wird nur einmal gestartet, D. H. jede HTTP-Anforderung an, dass der controller)
InformationsquelleAutor erip | 2016-04-06
Schreibe einen Kommentar