我的src / main / resources文件夹中有一个配置文件,我想加载它,我做的是:
println(getClass.getClassLoader.getResource("db.conf"))
val path = getClass.getClassLoader.getResource("db.conf").getPath
val DB_CONFIG = ConfigFactory.parseFile(new File(path))
println(DB_CONFIG)
// Prepare the MongoDB Connection credentials
val prepareMongoDBConfig: Option[(String, Int, String, String, String)] = for {
host <- Option(DB_CONFIG.getString("database_host"))
port <- Option(DB_CONFIG.getInt ("database_port"))
user <- Option(DB_CONFIG.getString("database_user"))
pass <- Option(DB_CONFIG.getString("database_pass"))
dbname <- Option(DB_CONFIG.getString("database_name"))
} yield (host, port, user, pass, dbname)
db.conf位于src / main / resources文件夹下。我把它打包成一个jar,这个jar作为一个库包含在Play项目中。当我对它进行单元测试时,它工作正常,但是当从Play服务器中运行时,我会看到以下内容:
20:41:10.216 [play-internal-execution-context-1] INFO play - Application started (Dev)
jar:file:/development/play-server/lib/server-core-1.0-SNAPSHOT.jar!/db.conf
Config(SimpleConfigObject({}))
可以看出SimpleConfigObject是空的。这是为什么?
答案 0 :(得分:1)
哦,我想我明白了。您正在尝试将jar中的资源作为文件加载,但它不是文件,它是jar中的路径。当你没有打包成jar时它就有效,因为在这种情况下它是一个单独的文件。
或许尝试ConfigFactory.parseResources("db.conf")
或ConfigFactory.parseResourcesAnySyntax("db")
。
针对可能遇到此问题的其他人提供更一般的故障排除提示:
-Dconfig.trace=loads
,并且可能在stderr上有一些有用的输出。jar xf
解压缩jar并确保它在预期的位置具有预期的db.conf。