我在src/main/resources
文件夹
application-dev.conf
包含
dev {
oracle {
host = "foo"
}
}
和 应用qa.conf
包含
qa {
oracle {
host = "bar"
}
}
我使用以下代码
阅读此配置val env = args.lift(0).getOrElse("dev")
val parsedConfig = ConfigFactory.parseFile(new File(s"src/main/resources/application-${env}.conf"))
val conf = ConfigFactory.load(parsedConfig)
val config = conf.getConfig(env)
println(config.getString("oracle.host"))
在开发时一切都很好,我能够根据指定的环境读取正确的配置文件。如果我没有指定任何内容,那么选择开发。
但是现在当我使用sbt assembly
将我的jar文件打包为程序集时,现在尝试从命令行运行我的应用程序java -jar ./target/MyApplication.jar
我收到错误
Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'dev'
at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:152)
at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:170)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:184)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:189)
我的目标是我应该有多个配置文件,我应该能够在开发时以及将应用程序打包为jar时在它们之间进行选择。
根据以下建议,我将代码修改为
val env = args.lift(0).getOrElse("dev")
val parsedConfig = ConfigFactory.parseFile(new File(getClass.getResource(s"/application-${env}.conf").toURI))
val conf = ConfigFactory.load(parsedConfig)
val config = conf.getConfig(env)
println(config.getString("oracle.host"))
在dev中工作,但是当我尝试运行我的程序集时会抛出异常
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:418)
答案 0 :(得分:1)
配置文件不在程序集中的src/main/resources
中。它通常位于类路径的根部(除非您已将插件配置为将其打包到其他位置)。
尝试使用如下。
ConfigFactory.load(s"application-${env}.conf")
这会从类路径加载配置文件。