2015-09-14 1 views
2

Ceci est une question de débutant, je lis beaucoup mais je suis un peu confus.erreur scala chargement d'un fichier de propriétés emballé dans le bocal

Je passe un fichier de propriétés depuis l'intérieur d'un pot, la configuration est lue, tout va bien.

Je voulais ajouter un try try. J'ai essayé mais cela ne fonctionne pas car le chargement ne produit pas d'exception si le fichier de propriétés n'est pas présent. Par conséquent 3 questions:

  • Est-il correct de charger des fichiers comme ceci?
  • Est-il sensé de mettre un try/catch puisque la config est dans le pot?
  • Si oui, des suggestions sur la façon de?

    var appProps : Config = ConfigFactory.load() 
    try { 
        appProps = ConfigFactory.load("application.properties") 
    } catch { 
        case e: Exception => { 
        log.error("application.properties file not found") 
        sc.stop() 
        System.exit(1) 
        } 
    } 
    

Répondre

3

Votre code semble correct en général.

ConfigFactory.load("resource.config") gère une ressource manquante comme une ressource vide. Par conséquent, vous obtenez un Config vide. Donc, un try-catch-block n'a pas vraiment de sens.

Vous spécifiez généralement une configuration de repli comme celui-ci:

val appProps = ConfigFactory.load(
    "application.properties" 
).withFallBack(
    ConfigFactory.load() 
) 

EDIT:

La phrase

En conséquence, vous obtenez un vide Config

Est un peu incomplet. ConfigFactory.load(resourceBaseName: String) applique defaultReference() et defaultOverrides(). Ainsi, l'objet Config qui en résulte contient probablement des données d'environnement génériques et n'est pas vide.

Pour autant que je peux voir, votre meilleure option pour vérifier si la ressource est là et émet un message d'erreur sinon, est de rechercher la ressource vous:

val configFile = "application.properties" 
    val config = Option(getClass.getClassLoader.getResource(configFile)).fold { 
    println(s"Config not found!") 
    ConfigFactory.load() 
    } { resource => 
    ConfigFactory.load(configFile) 
    } 
+0

Merci pour votre réponse. Juste une question: comme ceci si application.properties est introuvable une config vide sera chargée, est-ce correct? Si oui, comment puis-je tester si c'est le cas et l'enregistrer? Parce que j'ai essayé if (appProps.isEmpty) mais cela ne fonctionne pas – Irene

+1

@Irene J'ai mis à jour ma réponse. Note: Il n'est pas nécessaire de démarrer le fichier de ressources avec un '/', donc j'ai supprimé cela de la réponse. –