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

时间:2015-01-15 20:16:15

标签: scala 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"
}

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

感谢,

miki

9 个答案:

答案 0 :(得分:23)

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

所以,你错过的可能是其中之一:

  • src/main/resources是否可能不在您的课程路径上?
  • 是否设置了config.fileconfig.resourceconfig.url属性?
  • 您的application.conf文件是否为空?
  • 您是否在课程路径的早期找到了application.conf
  • 密钥是add
  • 中定义的application.conf

答案 1 :(得分:5)

您使用的是IDE还是sbt? 使用Eclipse时我遇到了类似的问题。它一开始没有找到application.conf文件,后来又没有注意到编辑。 但是,一旦我通过sbt运行我的程序,所有工作都很好,包括Eclipse。所以,我在库中添加了“主要/资源”(项目 - >属性 - > Java构建路径 - >库“”,“添加类文件夹”)。这对您也有帮助。

答案 2 :(得分:3)

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

答案 3 :(得分:3)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我遇到了完全相同的问题,解决方案是将=中的:替换为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不会检测到任何格式或语法错误。

答案 6 :(得分:0)

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

即使您可以拥有以下conf:

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

conf.getString("proc.min") //prints 60000

答案 7 :(得分:0)

在我看来,这是一个愚蠢的错误, 我将文件名从“ application.config”更改为“ application.conf”及其工作。

答案 8 :(得分:0)

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

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

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