2012-03-23 12 views
52

Chcę dodać obiekt do zakresu globalnego, a aby go zbudować, muszę przekazać ścieżkę do pliku. Nie chcę sztywno kodować ścieżki pliku w źródle, więc chcę uzyskać tę ścieżkę z pliku application.conf.Uzyskiwanie dostępu do właściwości application.conf z klasy Java z grą! 2.0

Problem polega na tym, że nie wiem, jak uzyskać dostęp do tych właściwości z klasy Java. Próbowałem to:

Configuration.root().getString("file.path") 

Ale to kończy się NullPointerException.

Czy jestem w błędzie zakładając, że istnieje globalna instancja konfiguracji, której mogę użyć? Dzięki.

Odpowiedz

79

Spróbuj Play.application().configuration().getString("your.key")

Jak zauważono w komentarzu (nico_ekito), proszę użyć play.Play i nie play.api.Play. play.api.Play jest dla kontrolerów scala (patrz komentarz: Marcus biesior Biesioroff)

Dodatkowo gra używa https://github.com/typesafehub/config pod maską, więc może również zapewnić pewne spostrzeżenia.

+0

Dzięki, że wystarczyły. –

+5

'Play.application()' już nie istnieje:/ –

+5

Uważaj przy imporcie, czy używasz 'play.Play', a nie' play.api.Play'? –

48

Nawet jeśli wydaje się prosta, tutaj jest scala sposób, aby uzyskać właściwości z pliku konfiguracyjnego:

zagraj 2.0 i 2.1:

import play.api.Play.current 
... 
Play.application.configuration.getString("your.key") 

Zagraj 2.2 i +

import play.api.Play.current 
... 
current.configuration.getString("your.key") 

Korzystanie Typesafe config

import com.typesafe.config.ConfigFactory 
... 
ConfigFactory.load().getString("your.key"); 
+0

Dzięki, używam java choć nie scala –

+1

Dlaczego nie możesz użyć 'current'? – cdmckay

+1

'Play.current.configuration.getString (" your.key ")' wydaje się być sposobem w Play 2.2.2 –

12

Od play 2 wykorzystuje bibliotekę Typesafe config, I moje vars dostępnego w application.conf tak:

ConfigFactory.load().getString("my.var"); 
+1

Tak! Ten wariant jest znacznie lepszy od innych. Działa również w filtrach (przed zainicjowaniem obiektu globalnego). –

+6

Należy pamiętać, że spowoduje to załadowanie domyślnego pliku konfiguracyjnego, ale jeśli później załadowano inne pliki (na przykład application.dev.conf) w opcji Global, nie zostaną one uwzględnione. Dowiedziałem się, jak trudno :( – redent84

1

jako odniesienie do niego dostęp z szablonu (dla grać < 2)

play.configuration['your.key'] 
2

Korzystając następująco (Testowane zagraj 1.2.5)

${play.configuration.getProperty('my.var')} 

gdzie my.var powinna być określona w application.conf pliku

+0

Szukałem tego +1 – gabby

+0

dla dokładnie tego, czego szukałem +1 –

3

W java gry jest:

import play.Play; 
... 
Play.application().configuration().getString("key") 
1

Jako ludzie wspominali, Play.application.configuration już nie istnieje.

W Play Scala 2.3.x, aby odczytać wartość z conf/application.conf, można wykonać następujące czynności:

import play.api.Play.current 
... 
current.configuration.getString("key") 
33

Od Play 2.4 and + lepiej jest używać iniekcji zależność do konfiguracji dostępu:

import play.Configuration; 
import javax.inject.Inject; 


@Inject 
private Configuration configuration; 

... 

String value = configuration.getString("your.key"); 
+1

Ponieważ konfiguracja w wersji 2.6.0 jest przestarzała i trzeba zamiast tego wprowadzić wtyczkę com.typesafe.config.Config. – Spen

0

In Play 1.2.x

import play.Play; 
... 


String version = Play.configuration.getProperty("application.version.number", "1.1.1"); 

gdzie drugi parametr jest wartością domyślną

0

importu tego

import com.typesafe.config.Config; 

i pisać wiersze poniżej

private Config config; 
this.config = ConfigProvider.config(); 
String value = this.config.getString("fieldFromConfigFile"); 
Powiązane problemy