Ho un file di configurazione servers.conf
nella mia directory conf/
che viene letto dal mio ServerController ogni volta che viene colpito il percorso /servers
. Questo non è performante perché richiede una rilettura del file di configurazione su ogni colpo successivo quando il file non cambia. Inoltre, se ci sono problemi con il file di configurazione, posso dire all'utente ASAP piuttosto che lanciare un'eccezione su un colpo di pagina.Come si esegue un'azione all'avvio del server in Scala Play Framework?
Attualmente ho questo nel mio 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))
}
}
Il mio obiettivo è quello di avere il server leggere il file di configurazione all'avvio e passare l'elenco dei server al ServerController durante il percorso viene colpito, se non ci sono problemi di lettura nel file di configurazione. Se ci sono problemi, voglio che venga lanciata un'eccezione immediatamente.
Tuttavia, non riesco a trovare un punto di ingresso per la mia applicazione, quindi non so come eseguire le azioni all'avvio.
Qualcuno sa come fare? Sto usando Play 2.5.x.
Quale versione di Play stai usando? – Anton
@ Anton Sorry. Modificato la domanda. – erip
Hai considerato di mettere l'intero blocco di codice al di fuori della funzione indice? (Esegue quando il controller viene avviato una sola volta, ad esempio qualsiasi richiesta HTTP inoltrata a quel controller) – dlite922