web-dev-qa-db-fra.com

Accès Play! Variables de configuration 2.0 dans application.conf?

Précédemment en jeu! v1 il était vraiment facile de définir des variables de configuration dans application.conf et ensuite y accéder comme suit:

play.configuration("db.driver")

Cependant, à présent, je ne trouve rien dans la documentation pour des utilisations similaires dans la v2 ou une alternative appropriée. Quelle est la méthode pour le faire?

80
crockpotveggies

À compter du jeu 2.5, play.api.Play.current est obsolète. Vous devriez utiliser l'injection de dépendance pour injecter le Environment ou Configuration et l'utiliser pour lire la valeur de configuration:

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

Commander le Lire la documentation pour une discussion plus détaillée.

34
Ali Dehghani

Le Play 2.0 Scala équivalent à ceci serait:

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

Vous aurez également besoin de import play.api.Play

Les documents complets pour cela sont ici .

115
Alex Varju

S'applique à Play 2.0 - In Java Controller, vous pouvez utiliser les éléments suivants:

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

Pour obtenir la variable en vue utilisez ceci:

@play.Play.application().configuration().getString("db.driver")
57
vladaman

Dans Play 2.3.2 for Java, vous pouvez utiliser le com.typesafe.config.ConfigFactory option:

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

API rapide!

21
Tony Day

Une autre méthode testée dans Jouez 2.3 [.8]/Java pour accéder aux valeurs de application.conf:

Pour vérifier la version de Play, examinez le fichier project/plugins. La ligne qui contient "sbt-plugin" devrait avoir une spécification de version comme "2.3.8".

Si, par exemple, application.conf contient les lignes

myConfigStringValue=abc
myConfigBooleanValue=true

on peut interroger ces valeurs depuis un fichier/classe Java comme

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

Les méthodes get ... renvoient null si la valeur n'est pas trouvée, il existe également des méthodes get ... qui prennent une valeur par défaut en tant qu'argument.

Pour plus de détails, voir https://www.playframework.com/documentation/2.3.x/api/Java/index.html

et inspecter le jeu en classe.Configuration.

6
Michael Besteck

Dans Play Scala 2.3.x et 2.4.x, pour lire une valeur de conf/application.conf, vous pouvez effectuer les opérations suivantes:

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

Dans Play 2.0.1 Java, vous devez procéder comme suit:

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

Dans Play 2.1, Scala Tout d’abord, vous devez import play.api.Play Play.current.configuration.getString("varibale name")

3

Dans Java avec lecture> 2.5.X, vous pouvez lire les valeurs de configuration via l’assistant ConfigFactory:

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

ou

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

L'objet Config convertira le paramètre dans le type correct. Il expose les méthodes pour gérer tout type Java (getDouble, getLong, etc, etc.)

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

2
db80

Si vous utilisez Play Scala , j’ai trouvé cette approche la plus appropriée après avoir recherché quelques-unes des meilleures pratiques. Pour ce faire, j'ai injecté la configuration, puis accédé à ma clé de configuration de la manière suivante:

import play.api.Configuration

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

De cette façon, vous n'obtenez pas l'option, mais la chaîne. Dans le cas où il n'est pas disponible, il lève une exception:

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

L'objectif principal était d'éviter la solution pure get que @ peoplemerge déjà mentionnée en lançant une exception spécifique si aucun.

2
Moritz

En tant que petite contribution/amélioration à tous les @Inject _ répond ici, vous n'avez pas besoin d'appeler le config.underlying la mise en oeuvre. Vous pouvez directement utiliser config.getString

exemple:

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

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

// nouvelle approche post 2.5.x

    import javax.inject.Inject
import play.api.Configuration

class Example @Inject() (playconfiguration: Configuration) {
    def index() = {
        val confString: String = playconfiguration.getString("confKey").get
    }

}

source: https://www.webkj.com/play-framework/play-scala-2.5-reading-config-using-di

0
Dawid Furman

Comme d'autres l'ont mentionné, vous devez importer play.api.Play.current. Alors si tu cours:

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

Sur 2.3.x/scala 10 vous obtiendrez

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

Si cela est obligatoire, cela fonctionnera:

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

Quelqu'un suggère une meilleure réponse?

0
peoplemerge