【问题标题】:No configuration setting found for key typesafe config未找到关键类型安全配置的配置设置
【发布时间】:2015-01-15 20:16:14
【问题描述】:

我正在尝试实现一个配置工具typesafehub/config 我正在使用此代码

 val conf = ConfigFactory.load()
 val url = conf.getString("add.prefix") + id + "/?" + conf.getString("add.token")

并且属性文件的位置是/src/main/resources/application.conf

但由于某种原因我收到了

com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'add'

文件内容

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"
}

一切看起来都配置正确??我错过了什么吗?

谢谢,

三木

【问题讨论】:

  • application.conf的内容是什么?
  • @Paul 我添加了文件内容
  • @MIkCode 你是怎么解决这个问题的?

标签: scala typesafe-config


【解决方案1】:

错误消息告诉您,无论读取什么配置,它都不包含名为 add 的顶级设置。 ConfigFactory.load 函数将尝试从多个位置加载配置。默认情况下,它将查找名为 application 且后缀为 .conf.json 的文件。它会在您的类路径上将该文件作为 Java 资源查找。但是,各种系统属性将覆盖此默认行为。

因此,您错过的很可能是以下之一:

  • src/main/resources 是否可能不在您的课程路径中?
  • 是否设置了config.fileconfig.resourceconfig.url 属性?
  • 您的application.conf 文件是空的吗?
  • 你有一个application.conf 可以在你的类路径中找到吗?
  • 密钥:add是否定义在application.conf中?

【讨论】:

  • 为了完整起见,我要补充一点,当您在 var 分配后添加类似 java 的 cmets 时,也可能会发生此错误。也就是说,使用 // 而不是 #.
  • 在我的情况下,application.conf 文件中省略了密钥
  • 在资源文件夹中我保存了 application.properties 文件,如何将它加载到程序中,我想区分 prod 和 dev 属性...请帮助我
  • 重命名为 application.conf。 Typesafe Config 不读取 .properties 文件,只读取 .conf 文件,因为它的文件不是 Java 属性语法。
【解决方案2】:

您使用的是 IDE 还是 sbt? 我在使用 Eclipse 时遇到了类似的问题。它起初根本没有找到 application.conf 文件,后来没有注意到编辑。 但是,一旦我通过 sbt 运行我的程序,一切正常,包括 Eclipse。所以,我在库中添加了“main/resources”(项目 -> 属性 -> Java 构建路径 -> 库”,“添加类文件夹”)。这也可能对您有所帮助。

【讨论】:

    【解决方案3】:

    将您的 application.conf 放在 src 文件夹中,它应该可以工作

    【讨论】:

      【解决方案4】:

      我在 SBT 驱动的 Specs2 测试中遇到了这个问题。原来这个问题是由https://github.com/etorreborre/specs2/issues/556引起的。在这种情况下,线程的 contextClassLoader 没有使用正确的类加载器。如果您遇到类似的错误,还有其他版本的 ConfigFactory.load() 允许您改为传递当前类的 ClassLoader。如果您使用 Specs2 并遇到此问题,请使用 = 4.0.1 的版本。

      【讨论】:

      • ScalaTest 也发生了同样的事情。突然间,我开始收到这个错误。你的解决方案奏效了! ConfigFractory.load(this.getClass().getClassLoader())
      【解决方案5】:

      检查你的路径。就我而言,我遇到了同样的问题,将 application.conf 放在 src/main/resources/configuration/common/application.conf 中

      不正确:

      val conf = ConfigFactory.load(s"/configuration/common/application.conf")
      

      正确

      val conf = ConfigFactory.load(s"configuration/common/application.conf")
      

      原来是我犯的一个愚蠢的错误。

      接下来,我在 .conf 文件中使用“:”还是“=”都没关系。

      从示例中获取值:

      server{
             proc {
                   max = "600"
                  }
            }
      conf.getString("server.proc.max")
      

      即使你可以拥有以下配置:

       proc {
                       max = "600"
                      }
       proc {
                      main = "60000"
                      }
      conf.getString("proc.max") //prints 600
      
      conf.getString("proc.min") //prints 60000
      

      【讨论】:

        【解决方案6】:

        我在我的配置文件中对一个整数执行getString 时遇到了这个问题。

        【讨论】:

          【解决方案7】:

          我遇到了完全相同的问题,解决方案是将application.conf 中的= 替换为:。在您的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"
          }
          

          奇怪的是,当我使用 = 时,IntelliJ 没有检测到任何格式或语法错误。

          【讨论】:

            【解决方案8】:

            就我而言,这是一个愚蠢的错误, 我将文件名从“application.config”更改为“application.conf”及其工作原理。

            【讨论】:

              【解决方案9】:

              如果application.conf 未被发现,您可以将其添加到build.sbt

              unmanagedSourceDirectories in Compile += baseDirectory.value / "main/resources"
              

              请不要使用它来包含任何自定义路径。遵循指南和best-practices

              【讨论】:

                【解决方案10】:

                正如其他人所说,确保 application.conf 位于:src/main/resources。

                我把文件放在那里,错误消失了。

                查看这些示例也对我有所帮助: https://github.com/lightbend/config/tree/main/examples/scala

                【讨论】:

                  猜你喜欢
                  • 2018-10-31
                  • 2017-09-28
                  • 2015-09-04
                  • 1970-01-01
                  • 2017-07-31
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-03-16
                  相关资源
                  最近更新 更多