web-dev-qa-db-fra.com

Aucun paramètre de configuration trouvé pour la clé typesafe config

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 

18
MIkCode

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:

  • Est-il possible que src/main/resources ne soit pas sur votre chemin de classe? 
  • Les propriétés config.file, config.resource ou config.url sont-elles définies?
  • Votre fichier application.conf est-il vide?
  • Avez-vous un application.conf qui se trouverait plus tôt dans votre chemin de classe?
  • La clé: add est-elle définie dans le application.conf?
19
Reid Spencer

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.

5
Tim Malt

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.

3
jsears

Placez votre application.conf dans le dossier src et cela devrait fonctionner

1
Deepesh Rehi

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
0
AlexPes

Je me suis heurté à cela en faisant une getString sur un entier de mon fichier de configuration.

0
Def_Os

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.

0
koleS