2012-03-23 10 views
52

Voglio aggiungere un oggetto all'ambito Globale e per costruirlo devo passare un percorso a un file. Non voglio codificare il percorso del file nel sorgente, quindi voglio ottenere quel percorso da application.conf.Accesso alle proprietà application.conf dalla classe java con Play! 2.0

Il problema è che non so come accedere a queste proprietà dalla classe java. Ho provato questo:

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

ma finisce con un NullPointerException.

Mi sbaglio nell'assumere che sia possibile utilizzare un'istanza di configurazione globale? Grazie.

risposta

79

Prova Play.application().configuration().getString("your.key")

Come notato nel commento (nico_ekito), si prega di utilizzare play.Play e non play.api.Play. play.api.Play è per controller di scala (vedere commento di Marcus biesior Biesioroff)

Inoltre, il gioco utilizza https://github.com/typesafehub/config sotto il cofano in modo che possa fornire anche alcuni approfondimenti.

+0

Grazie, che ha fatto il trucco. –

+5

'Play.application()' non esiste più:/ –

+5

Stai attento con l'importazione, usi 'play.Play' e non' play.api.Play'? –

48

Anche se sembra semplice, ecco il scala modo per ottenere oggetti di file di configurazione:

Gioca nei 2.0 e 2.1:

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

Gioca 2.2 e +

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

Utilizzando Typesafe config

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

Grazie, sto usando java però e non scala –

+1

Perché non puoi usare 'corrente'? – cdmckay

+1

'Play.current.configuration.getString (" your.key ")' sembra essere il modo in Play 2.2.2 –

12

Dal Play 2 utilizza la libreria di configurazione Typesafe, ho i miei accede Vars in application.conf come questo:

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

Sì! Questa variante è molto meglio di altre. Funziona anche nei filtri (prima dell'inizializzazione dell'oggetto Global). –

+6

Attenzione che questo caricherà il file di configurazione predefinito, ma se in seguito hai caricato altri file (ad esempio, application.dev.conf) in Global, non verrà preso in considerazione. Trovato nel modo più duro :( – redent84

1

Come riferimento per accedervi dal modello (per giocare < 2)

play.configuration['your.key'] 
2

Usa come segue (Testato in Play 1.2.5)

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

dove my.var dovrebbero essere specificati nel file di application.conf

+0

stavo cercando quello +1 – gabby

+0

esattamente per quello che stavo cercando +1 –

3

Nel java gioco è:

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

Come persone hanno già detto, Play.application.configuration non esiste più.

In Play Scala 2.3.x, per leggere un valore da conf/application.conf, è possibile effettuare le seguenti operazioni:

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

Da Play 2.4 and + è meglio usare l'iniezione di dipendenza per le configurazioni di accesso:

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


@Inject 
private Configuration configuration; 

... 

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

Dato che la Play 2.6.0 Configuration è deprecata e devi invece iniettare 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"); 

dove il secondo parametro è il valore predefinito

0

Importa questo

import com.typesafe.config.Config; 

e scrivere le righe sotto

private Config config; 
this.config = ConfigProvider.config(); 
String value = this.config.getString("fieldFromConfigFile"); 
Problemi correlati