を選んで、私は右の設定ファイル
qa {
oracle {
host = "bar"
}
}
が含まれてい
dev {
oracle {
host = "foo"
}
}
と アプリケーションqa.conf
が含まれている私のsrc/main/resources
フォルダ
application-dev.conf
に2つのファイルを作成しました
私は、次のコード
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)
エラーを取得する私の目的は私がすべきことである
複数の設定ファイルを持っているので、devの時に、そしてアプリケーションがjarとしてパッケージ化されているときに、それらの間で選択できるはずです。私はdevに
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"))
作品に私のコードを変更し、私は私のアセンブリを実行しようとすると、それは例外
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:418)
が機能しませんでした。設定ファイルが見つかりません。 –
設定ファイルがアセンブリ内のクラスパスのルートにあることは確かですか?そうでなければ、それに応じてパスを追加する必要があります。 – Jegan
はいそのルートにあります。私は瓶に 'jar -tvf'をして確認しました。 –