Scala Typesafe配置打印文件路径,键和值

时间:2017-10-01 16:58:46

标签: scala typesafe

在scala中使用typesafe配置库时,尝试找到一种非常简单,干净的方法来打印文件路径和键以及application.conf文件中存在的值。我发现很多例子几乎可以满足我的需求,但无法弄清楚如何正确地过滤到仅在文件中的键。例如,我尝试了以下变化,但它打印了太多的值以及我需要的内容,例如akka等,我不知道它从哪里来。

  val keys = propReader.getConfig().entrySet().map(_.getKey)
  val values = propReader.getConfig().entrySet().map(_.getValue)
  for (key <- keys) if (key.contains("mykey"))
    for (value <- values) println(key, value)

还试过但也打印太多了

  private def listingPathsAndKeys(config: Config) {
    import scala.collection.JavaConversions._
    def display(codeAsString: String)(body: => Any) {
      println(body)
    }
    display("config.root().keySet()") {
      config.root().render(ConfigRenderOptions.concise())

    }
  }
  listingPathsAndKeys(propReader.getConfig())

这给了我根级别键,理想情况下我想过滤到我文件中的特定根,只打印键/值:

config.root().keySet()

4 个答案:

答案 0 :(得分:0)

我不知道如何打印正在使用的application.conf路径。但是,我可以推荐一种打印key-value对的好方法:

1。 在application.conf中将参数括在指定的命名空间中。

<强> application.conf:

 sample-configuration = {
    key1 = "value1"
    key2 = "value2"
 }

2。 在应用程序中加载配置并仅打印指定命名空间中的参数:

val config: Config = ConfigFactory.load()
val sampleConfig: Config = config.getConfig("sample-configuration")
println(sampleConfig)

答案 1 :(得分:0)

此答案基于Typesafe Config 1.3.1

要获取配置文件的路径,首先在application.conf中获取子树(检查@ fcat的答案),返回Config对象,然后在其上使用origin()方法。您将获得ConfigOrigin字段,其中url字段指向您的application.conf

config.getConfig("sample-configuration").origin()

换句话说 - 这将返回配置子树的原点,在您的情况下是application.conf文件。但是,在某些情况下ConfigOrigin.url可以为空。

您提供的代码不包含有关如何实际加载配置的任何信息。根据您的描述,我假设它是ConfigFactory.load(),在这种情况下,库使用一堆默认值来加载类路径中存在的不同配置。这就是为什么你得到application.conf中不存在的一些密钥的原因。由于ConfigFactory.load()实际上从类路径中找到的合并Config返回,因此无法获得其“合并”原点。

答案 2 :(得分:0)

试图做同样的事情以确定哪个值来自哪个配置文件。另一种方法是编写一个脚本,将当前文件路径附加到每个值之后,然后转储合并的配置文件,然后您就可以知道该值来自哪个文件。

答案 3 :(得分:0)

您可以使用此工具:Hocon Config Printer

它将显示“最终”配置文件,以及从中读取每个设置的文件。

示例:

hocon-config-printer conf/application.conf  -verbose

输出:

    {
    # conf/akka.conf: 1-5
    "akka" : {
        # conf/akka.conf: 9
        "actor" : {
            # conf/akka.conf: 10
            "default-dispatcher" : {
                # conf/akka.conf: 11
                "fork-join-executor" : {
                    # conf/akka.conf: 12
                    "parallelism-factor" : 3,
                    # conf/akka.conf: 14
                    "parallelism-max" : 200,
                    # conf/akka.conf: 13
                    "parallelism-min" : 10
...