找不到密钥类型安全配置的配置设置
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.file
、config.resource
或 config.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
我正在尝试实现配置工具 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.file
、config.resource
或config.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