2013-10-24 7 views
12

Ich möchte meine Play-Anwendung auf eine bestimmte Anwendung Konfigurationsdatei basierend auf der Umgebung, in der es ausgeführt wird zeigen. Es gibt drei und sie entsprechen den Standard Play-Status:Detect Play 2.2.x-Modus vor dem Start der Anwendung mit Java

  • application.dev.conf
  • application.test.conf
  • application.prod.conf

ein Mitarbeiter teilte eine Methode, dies zu tun, die ein OS envir Einstellung erfordert Variable.

Ich möchte die Notwendigkeit, eine Betriebssystemvariable zu setzen, beseitigen. Meine Präferenz ist die Verwendung, was auch immer spielt beim Start verwendet zu wissen, in welchem ​​Modus es in ist.

Zum Beispiel, wenn Sie play run von der Kommandozeile ausgeführt werden, einen Teil der Ausgabe ist "[info] play - Application started (Dev)"

Ich möchte dies nutzen Informationen in meinem Global.java, wo ich außer Kraft setzen onLoadConfig wie so:

public Configuration onLoadConfig(Configuration baseConfiguration, File f, ClassLoader loader) { 
    String playEnv=<some static method to get mode>;   
    Config additionalConfig = ConfigFactory.parseFile(new File(f,"conf/application."+playEnv+".conf")); 
    Config baseConfig = baseConfiguration.getWrappedConfiguration().underlying(); 
    return new Configuration(baseConfig.withFallback(additionalConfig)); 
} 

Alles, was ich finde, ist, wie diese nach zu tun hat die Anwendung, dh mit isDev(), isTest(), isProd() gestartet .

Gibt es eine statische Methode, die den Modus bereitstellt, während ich onLoadConfig in Global.java überschreibe?

+0

In Scala gibt es einen Parameter 'Modus', in Java gibt es nicht. Also habe ich ein Ticket geöffnet: https://github.com/playframework/playframework/issues/2279 –

+0

Danke Antonio. Ich werde das Problem verfolgen. –

Antwort

3

Ich denke play run ist dev, play start ist prod.

EDIT: Wenn Sie schauen, um zu sehen, was der aktuelle Modus ist, es passiert in durch play.api.Play.current:

Play.current.mode match { 
    case Play.Mode.Dev => "dev" 
    case Play.Mode.Prod => "prod" 
} 
+0

Ich denke, dass die Frage ist zu bestimmen, ob die Anwendung in "dev" oder "prod" von innen ist, nicht darüber, wie die Anwendung im 'dev' oder 'prod' Modus ausgeführt wird. –

+0

In Bezug auf Ihre Bearbeitung wird der Modus nicht auf "Aktuell" gesetzt, da beim Laden der Konfigurationen keine Anwendung ausgeführt wird. –

0

Wiedergabe ermöglicht specifying alternative configuration file mit Kommandozeile, so dass keine Notwendigkeit für die Einrichtung Betriebssystemvariablen

Sie können natürlich einige Bash-Skript/bat-Datei erstellen, es jedes Mal

+1

Nicht wirklich hilfreich. Ich möchte den Play-Modus zur Laufzeit innerhalb meiner Anwendung abrufen können. –

3

Das Problem zu vermeiden Schreiben erschien in der aktuellen Play (3.0.0) behandelt werden. Es gibt eine weitere onLoadConfig Methode, die zu Global hinzugefügt wird, die einen mode: {Dev,Prod,Test} Parameter hat.

public Configuration onLoadConfig(Configuration config, File path, ClassLoader classloader, Mode mode) { 
    return onLoadConfig(config, path, classloader); // default implementation 
} 
+0

Spielen 3.0.0? Ist es schon die Zukunft? – nietaki