找不到密钥类型安全配置的配置设置

No configuration setting found for key typesafe config

我正在尝试实现配置工具 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"
}

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

谢谢,

三木

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

所以,您错过的可能是以下之一:

  • 有没有可能 src/main/resources 不在您的 class 路径上?
  • 是否设置了 config.fileconfig.resourceconfig.url 属性?
  • 你的application.conf文件是空的吗?
  • 您是否有可以在您的 class 路径中更早找到的 application.conf
  • 是否在 application.conf 中定义了键:add

您使用的是 IDE 还是 sbt? 我在使用 Eclipse 时遇到了类似的问题。它一开始只是没有找到 application.conf 文件,后来也没有注意到编辑。 但是,一旦我通过 sbt 运行 我的程序,一切都运行良好,包括 Eclipse。因此,我将 'main/resources' 添加到库中(项目 -> 属性 -> Java 构建路径 -> 库”,"add class folder")。这也可能对你有帮助。

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

我 运行 在 SBT 驱动的 Specs2 测试中解决了这个问题。原来问题是由 https://github.com/etorreborre/specs2/issues/556 引起的。在那种情况下,Thread 的 contextClassLoader 没有使用正确的 classloader。如果您 运行 遇到类似的错误,还有其他版本的 ConfigFactory.load() 允许您传递当前 class 的 ClassLoader。如果您使用的是 Specs2 并且遇到此问题,请使用 <= 3.8.6 或 >= 4.0.1 的版本。

我 运行 对我的配置文件中的整数执行 getString

我 运行 遇到了完全相同的问题,解决方案是在 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"
}

St运行gely,当我使用 = 时,IntelliJ 没有检测到任何格式或语法错误。

检查你的路径。就我而言,我遇到了同样的问题,将 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

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

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

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

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

正如其他人所提到的,确保 application.conf 位于:src/main/resources.

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

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