J'essaie d'implémenter un outil de configuration typesafehub/config Im en utilisant ce code
val conf = ConfigFactory.load()
val url = conf.getString("add.prefix") + id + "/?" + conf.getString("add.token")
Et l'emplacement du fichier de propriétés est /src/main/resources/application.conf
Mais pour une raison quelconque, je reçois
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'add'
Contenu du fichier
add {
token = "access_token=6235uhC9kG05ulDtG8DJDA"
prefix = "https://graph.facebook.com/v2.2/"
limit = "&limit=250"
comments="?pretty=0&limit=250&access_token=69kG05ulDtG8DJDA&filter=stream"
feed="/feed?limit=200&access_token=623501EuhC9kG05ulDtG8DJDA&pretty=0"
}
Tout semble configuré correctement ?? est-ce que j'ai raté quelque chose?.
merci,
miki
Le message d'erreur vous indique que quelle que soit la configuration obtenue, elle n'inclut pas de paramètre de niveau supérieur nommé add
. La fonction ConfigFactory.load
tentera de charger la configuration à partir de divers endroits. Par défaut, il recherchera un fichier nommé application
avec un suffixe de .conf
ou .json
. Il recherche ce fichier en tant que ressource Java sur votre chemin de classe. Cependant, diverses propriétés système remplaceront ce comportement par défaut.
Donc, il est probable que ce que vous avez oublié est l'un de ceux-ci:
src/main/resources
ne soit pas sur votre chemin de classe? config.file
, config.resource
ou config.url
sont-elles définies?application.conf
est-il vide?application.conf
qui se trouverait plus tôt dans votre chemin de classe?add
est-elle définie dans le application.conf
?Utilisez-vous un IDE ou un sbt? J'ai eu un problème similaire lors de l'utilisation d'Eclipse. Il n'a tout simplement pas trouvé le fichier application.conf au début et n'a plus réussi à remarquer les modifications. Cependant, une fois que j'ai lancé mon programme via sbt, tout fonctionnait parfaitement, y compris Eclipse. J'ai donc ajouté «principal/ressources» aux bibliothèques (Projet -> Propriétés -> Chemin de construction Java -> Bibliothèques "," Ajouter un dossier de classes "). Cela pourrait également vous aider.
J'ai rencontré ce problème dans un test Specs2 piloté par SBT. Il s’est avéré que le problème était dû à https://github.com/etorreborre/specs2/issues/556 . Dans ce cas, le fichier contextClassLoader du thread n'utilisait pas le chargeur de classes approprié. Si vous rencontrez une erreur similaire, il existe d'autres versions de ConfigFactory.load () qui vous permettent de transmettre le ClassLoader de la classe actuelle à la place. Si vous utilisez Specs2 et que vous rencontrez ce problème, utilisez une version <= 3.8.6 ou> = 4.0.1.
Placez votre application.conf dans le dossier src et cela devrait fonctionner
Vérifiez votre chemin. Dans mon cas, j'ai eu le même problème, ayant application.conf placé dans src/main/resources/configuration/common/application.conf.
Incorrect:
val conf = ConfigFactory.load(s"/configuration/common/application.conf")
Correct
val conf = ConfigFactory.load(s"configuration/common/application.conf")
c'est une erreur stupide que j'ai commise.
Après cela, peu importe si vous utilisez ":" ou "=" dans le fichier .conf.
Obtenir la valeur de l'exemple:
server{
proc {
max = "600"
}
}
conf.getString("server.proc.max")
Même vous pouvez avoir la conf suivante:
proc {
max = "600"
}
proc {
main = "60000"
}
conf.getString("proc.max") //prints 600
conf.getString("proc.min") //prints 60000
Je me suis heurté à cela en faisant une getString
sur un entier de mon fichier de configuration.
J'ai rencontré exactement le même problème et la solution consistait à remplacer =
par :
dans le application.conf
. Essayez avec le contenu suivant dans votre application.conf
:
add {
token: "access_token=6235uhC9kG05ulDtG8DJDA"
prefix: "https://graph.facebook.com/v2.2/"
limit: "&limit=250"
comments: "?pretty=0&limit=250&access_token=69kG05ulDtG8DJDA&filter=stream"
feed: "/feed?limit=200&access_token=623501EuhC9kG05ulDtG8DJDA&pretty=0"
}
Étrangement, IntelliJ ne détecte aucune erreur de formatage ou de syntaxe lors de l'utilisation de =
pour moi.