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?
À 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.
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 .
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")
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!
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.
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")
Dans Play 2.0.1 Java, vous devez procéder comme suit:
import play.Application.*;
...
String optionValue = play.Play.application().configuration().getString("my.config");
Dans Play 2.1, Scala Tout d’abord, vous devez import play.api.Play Play.current.configuration.getString("varibale name")
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
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.
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
...
// 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
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?