2012-03-25 21 views
78

¡Anteriormente en Play! v1 que era muy fácil de definir las variables de configuración en application.conf y luego acceder a ellos de esta manera:¡Accede a Play! 2.0 variables de configuración en application.conf?

play.configuration("db.driver") 

Sin embargo ahora no puedo encontrar nada en la documentación para usos similares en v2 o una alternativa adecuada. ¿Cuál es el método para hacerlo?

+0

Para los nuevos visitantes, esta pregunta no se limita a Play 2.0.Se han realizado muchas otras respuestas para otras versiones de juego a continuación. – saurabheights

Respuesta

31

A partir de Play 2.5, play.api.Play.current está obsoleto. Debe utilizar la inyección de dependencias para inyectar el Environment o Configuration y usarlo para leer el valor de configuración:

class HomeController @Inject() (configuration: play.api.Configuration) extends Controller { 
    def config = Action { 
    Ok(configuration.underlying.getString("db.driver")) 
    } 
} 

Pedido del Play documentation para una discusión más detallada.

+5

Gracias por proporcionarnos una respuesta actualizada. ¡Estaré marcando esto como la respuesta correcta para los futuros usuarios de Play! 2.x – crockpotveggies

+1

Gracias, esto debería funcionar bien hasta que Play se cambie de nuevo. – Karlth

113

El Juego 2.0 Scala equivalente a esto sería:

Play.current.configuration.getString("db.driver") 

También necesitará import play.api.Play

Los documentos completos para esto son here.

+0

muchas gracias y aprecio el enlace. con suerte, vemos más documentos en la casa de Scala fuera del explorador de API :) – crockpotveggies

+15

Tenga en cuenta que, dependiendo del caso, no puede asumir que la aplicación aún no se ha iniciado o que no necesitaba la aplicación hasta esta porción de código ; puede usar 'play.api.Play.maybeApplication.map (_. configuration.getString (" db.driver "))' –

+6

Esto ahora está en desuso en Play 2.5. Consulte la [guía de migración] (https://www.playframework.com/documentation/2.5.x/Migration25#Deprecated-play.Play-and-play.api.Play-methods) – Breavyn

57

se refiere a: Juego 2.0 - En controlador Java permite utilizar las siguientes:

String optionValue = Play.application().configuration().getString("db.driver"); 

Para obtener la variable uso en vista esto:

@play.Play.application().configuration().getString("db.driver") 
+1

¿Cómo puedo usarlo en el javascript? ? – Premraj

+1

@premraj Utilice compartirlo como un atributo de datos HTML5 de un div invisible. – Josef

4

En juego 2.0.1 de Java, necesita hacer esto:

import play.Application.*; 
... 
String optionValue = play.Play.application().configuration().getString("my.config"); 
3

de Juego 2.1, Scala En primer lugar hay que import play.api.Play Play.current.configuration.getString("varibale name")

21

En Juego para Java 2.3.2 puede utilizar la opción com.typesafe.config.ConfigFactory:

Config conf = ConfigFactory.load(); 
String myFooBarConfiguration = conf.getString("foo.bar"); 

API movimiento rápido!

+0

Esta es la respuesta correcta para la versión actual de Play ... sin el uso de DI. – toidiu

+0

Esta solución es independiente de la versión Play. También funciona en Scala. Podría depender de la versión HOCON si alguna vez cambiaran ese punto de acceso. –

5

En juego Scala 2.3.x y 2.4.x, para leer un valor de conf/application.conf, puede hacer lo siguiente:

import play.api.Play.current 
... 
current.configuration.getString("db.driver") 
0

Como otros han mencionado, es necesario importar play.api.Play. corriente. A continuación, si ejecuta:

current.configuration.getString("db.driver") 

En 2.3.x/Scala 10 se obtendrá

type mismatch; 
found : Option[String] 
required: String 

Si esto es obligatorio, esto va a funcionar:

url = current.configuration.getString("db.driver").get 

alguien sugerir una mejor ¿responder?

6

Otro método probado en Juego 2.3 [0.8]/Java para acceder a los valores de application.conf:

Para comprobar la versión de juego, examine el archivo de proyecto/plugins. La línea que contiene "sbt-plugin" debe tener una especificación de versión como "2.3.8".

Si, por ejemplo, la aplicación.conf contiene las líneas

myConfigStringValue=abc 
myConfigBooleanValue=true 

uno podría preguntar que los valores de un archivo de clase java/como

import play.Configuration; 
... 
String myString = Configuration.root().getString("myConfigStringValue"); 
Boolean myBoolean = Configuration.root().getBoolean("myConfigBooleanValue"); 

El get ... métodos devuelven un valor nulo si no se encuentra el valor, también hay GET. .. métodos que toman un valor predeterminado como argumento.

Para más detalles ver https://www.playframework.com/documentation/2.3.x/api/java/index.html

e inspeccionar play.Configuration clase.

2

En caso de que esté usando Juego Scala, este enfoque me pareció el más apropiado después de buscar algunas de las mejores prácticas. Para ello, Inyecté la configuración y luego visitada mi clave de configuración de esta manera:

import play.api.Configuration 

class myClass @Inject()(
    config: Configuration 
) { 
    val configValue: String = config.underlying.getString("configKey") 
} 

De esta manera, usted no recibe la opción, pero la cadena. En caso de que no está disponible, se produce una excepción:

Error injecting constructor, com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'configKey' 

objetivo principal era evitar la solución pura get que @peoplemerge ya se ha mencionado al lanzar una excepción específica si ninguno.

0

Como una pequeña contribución/mejora a todas las respuestas @Inject aquí, no necesita llamar a la implementación config.underlying. Se puede utilizar directamente config.getString

ejemplo:

@Singleton 
class RESTSessionChecker @Inject()(
    implicit override val conf: Configuration) 
    extends Filter { 

    val MAX_CONCURRENT_REQUESTS = conf.getString("MAX_CONCURRENT_REQUESTS"). 
     getOrElse("100").toInt 
    ... 
2

En Java con el juego> 2.5.X se pueden leer los valores de configuración a través del ayudante ConfigFactory:

ConfigFactory.load().getString("redis.url") 

o

ConfigFactory.load().getInt("redis.port") 

El objeto Config wil Convertir el param en el tipo correcto. Se expone los métodos para manejar cualquier tipo java (getDouble, getLong, etc, etc)

Doc: https://www.playframework.com/documentation/2.5.0/api/java/play/Configuration.html

+1

simple y evitar inyectar en todos los controladores el valor ... – cyril

Cuestiones relacionadas