2016-10-25 15 views
0

を選んで、私は右の設定ファイル

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) 

答えて

1

設定ファイルがでないスロー以下の提案に基づいて

アセンブリ内のsrc/main/resources。通常はクラスパスのルートにあります(プラグインを別の場所にパッケージするように設定していない限り)。

下記のようにお試しください。

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

これは、クラスパスから設定ファイルを読み込みます。

+0

が機能しませんでした。設定ファイルが見つかりません。 –

+0

設定ファイルがアセンブリ内のクラスパスのルートにあることは確かですか?そうでなければ、それに応じてパスを追加する必要があります。 – Jegan

+0

はいそのルートにあります。私は瓶に 'jar -tvf'をして確認しました。 –

関連する問題