2
votes

Comment puis-je générer un fichier de configuration de type sécurisé (Hocon) dynamiquement dans scala (générer un fichier de configuration)

Je souhaite générer dynamiquement la configuration Hocon.

Carte d'entrée et

fichier de sortie avec le contenu ci-dessous

val finalConfig : String =
      myConfig.root().render( ConfigRenderOptions.defaults())
println(finalConfig)

impossible de comprendre comment en extraire la configuration

J'ai essayé l'option ci-dessous mais elle s'imprime au format JSON

block{
key1 : value
key2 : value
}

Trying to read map
     var myMap = new util.HashMap[String,AnyRef]()
     val myConfig = ConfigFactory.parseMap(myMap)

myConfig.toString print below
Config(SimpleConfigObject({"key":"value"}))

Toute autre approche pour générer la configuration de sorte que la structure imbriquée peut être pris en charge?

Edit: Solution trouvée La configuration imbriquée peut être créée à l'aide de ConfigFactory. WithValue https://marcinkubala.wordpress.com/2013/10/09 / typesafe-config-hocon /


0 commentaires

3 Réponses :


1
votes

Vous pouvez utiliser kxbmap / configs

Cela prend en charge play-json prêt à l'emploi. Je l'utilise pour mapper des configurations entières directement à des classes de cas .

Donc, votre exemple ressemblerait à:

import com.typesafe.config.ConfigFactory
import configs.Configs

val config = ConfigFactory.parseString("""
  block{
    key1 : value
    key2 : value
  }
  """)

config.get[Map[String, String]("block")


2 commentaires

Salut @ pme mon entrée une carte et je veux imprimer le fichier de configuration. Je veux générer un fichier de configuration


désolé - je viens d'utiliser cette bibliothèque hier - j'étais donc un peu trop enthousiaste pour l'utiliser;)



1
votes

Je ne suis pas sûr de bien comprendre votre problème ...

Mais il me semble que vous n'avez qu'à formater votre Map en tant que HOCON -like String .
Ce que vous pouvez écrire ultérieurement dans un fichier.

J'espère que cet extrait de code est ce que vous recherchez:

import collection.JavaConverters._

def toHocon(map: java.util.Map[String, AnyRef]): String =
  map
   .asScala
   .map { case (key, value) => s"$key : $value" }
   .mkString("block{\n\t", "\n\t", "\n}")

(j'en ai utilisé un tab pour l'indentation, vous pouvez le remplacer par plus de tabulations , ou par un nombre fixe d'espaces blancs) .


2 commentaires

J'aime cette solution mais elle peut ne pas prendre en charge la création imbriquée de Hocon. Toutes les entrées si je veux créer json imbriqué dans scala comme p1 {clé: valeur, c1 {clé1: valeur1}}


@ user2895589 Merci d'avoir accepté ma réponse, mais je n'ai vraiment pas répondu à votre question. Vous devez ajouter votre propre réponse et accepter celle-ci à la place.



0
votes

Vous pouvez essayer ci-dessous:

    myConfig.root().render(com.typesafe.config.ConfigRenderOptions.concise())


0 commentaires