我正在尝试实施配置工具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
答案 0 :(得分:23)
错误消息告诉您,无论读取什么配置,它都不包含名为add
的顶级设置。 ConfigFactory.load
函数将尝试从各种位置加载配置。默认情况下,它会查找名为application
的文件,后缀为.conf
或.json
。它将该文件作为类路径上的Java资源进行查找。但是,各种系统属性将覆盖此默认行为。
所以,你错过的可能是其中之一:
src/main/resources
是否可能不在您的课程路径上? config.file
,config.resource
或config.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)
答案 8 :(得分:0)
如果未发现application.conf
,可以将其添加到build.sbt
:
unmanagedSourceDirectories in Compile += baseDirectory.value / "main/resources"
请不要使用它来包含任何自定义路径。遵循准则和best-practices