选择正确的配置文件

时间:2016-10-25 11:51:10

标签: scala typesafe-config

我在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)

1 个答案:

答案 0 :(得分:1)

配置文件不在程序集中的src/main/resources中。它通常位于类路径的根部(除非您已将插件配置为将其打包到其他位置)。

尝试使用如下。

ConfigFactory.load(s"application-${env}.conf")

这会从类路径加载配置文件。