2013-10-24 20 views
12

Chcę wskazać moją aplikację odtwarzania na konkretny plik konfiguracyjny aplikacji na podstawie środowiska, w którym działa. Są trzy i odpowiadają standardowym Stanom odtwarzania:Wykryj odtwarzanie w trybie 2.2.x przed uruchomieniem aplikacji za pomocą Java

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

współpracownik wspólną metodę dla tej operacji, która wymaga ustawienie Środ OS Zmienna onment.

Chciałbym wyeliminować konieczność ustawiania zmiennej systemu operacyjnego. Mój preferencji jest zastosowanie niezależnie Gra wykorzystuje przy starcie wiedzieć, w jakim trybie jest w.

Na przykład, jeśli wykonasz play run z linii poleceń, część produkcji jest "[info] play - Application started (Dev)"

chcę użyć tego informacje zawarte w moim Global.java gdzie zastępują onLoadConfig tak:

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)); 
} 

Wszystko, co mogę znaleźć jak to zrobić to po aplikacja została uruchomiona czyli używając isDev(),(), isTest isProd() .

Czy istnieje metoda statyczna, która zapewnia tryb, gdy nadpisuję LoadConfig w pliku Global.java?

+0

W Scala znajduje się parametr 'mode' w Javie nie ma. Więc otworzyłem bilet: https://github.com/playframework/playframework/issues/2279 –

+0

Dzięki Antonio. Będę śledzić problem. –

Odpowiedz

3

Myślę, że play run jest dev, play start jest prod.

EDIT: Jeśli szukasz, aby zobaczyć jaki jest aktualny tryb, to podjęta w przez play.api.Play.current:

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

Myślę, że pytanie dotyczy ustalenia, czy aplikacja jest w "dev" lub "prod" od środka, a nie o tym, jak uruchomić aplikację w trybie "dev" lub "prod'". –

+0

Jeśli chodzi o edycję, tryb nie jest ustawiony jako bieżący, ponieważ podczas ładowania konfiguracji nie byłoby uruchomionej aplikacji. –

0

play umożliwia specifying alternative configuration file z linii poleceń więc nie ma potrzeby ustawiania Zmienne OS.

Można oczywiście stworzyć jakiś plik skryptu bash/bat aby uniknąć pisania go za każdym razem

+1

Niezbyt pomocne. Chcę móc pobierać tryb odtwarzania w czasie wykonywania z poziomu mojej aplikacji. –

3

Problem pojawił się zająć w najnowszym Play (3.0.0). Istnieje inna metoda onLoadConfig dodana do Global ma parametr mode: {Dev,Prod,Test}.

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

Graj w 3.0.0? Czy to już przyszłość? – nietaki