web-dev-qa-db-ja.com

uberjarを使用してデプロイするときに、Typesafeconfigの複数のconfig値をオーバーライドする

resource/application.confで定義された複数の構成値(IPアドレス、ポート番号)を使用するAkkaアプリケーションがあります。 sbt-Assemblyプラグインを使用してuberjarを作成し、このjarをデプロイしています。

Uber jarの外部にある別のファイルを使用して、application.confファイル全体をオーバーライドする方法はありますか? (つまり、新しいconfファイルの値が使用されます)

15
Soumya Simanta

これを実現するには、さまざまな方法があります。

  1. 外部ディレクトリから_application.conf_を含めるようにクラスパスを設定し、jarなどの他のクラスパスエントリの前にクラスパスに表示します。これを行うには、通常の_Java -classpath myconfdir:theapp.jar_を使用して、メインクラスを明示的に指定します。

  2. または、confファイルの_include "application"_ディレクティブを使用して、別のconfファイルをファイルに含めることもできます。

  3. 含めるファイルを指す環境変数を_application.conf_に設定できます。その後、シェルでenvを設定します。

  4. プログラムで値をオーバーライドできます:config.withValue("hostname", ConfigValueFactory.fromAnyRef("localhost")ActorSystemは、Confオブジェクトを取得するか、提供されていない場合はデフォルトのconfからロードします。

  5. これまでで最も簡単なは、_-Dconfig.resource=/dev.conf_ Javaコマンドライン引数を使用して別のファイルを選択することです。

詳細については、公式ドキュメントを参照してください ここ

25
yǝsʞǝla

私たちはそのように製品でそれを行います:

#deploy_prod.conf
include "application"

akka.remote.hostname = "prod.blah.com"    

# Example of passing in S3 keys
s3.awsAccessKeyId="YOUR_KEY"
s3.awsSecretAccessKey="YOUR_SECRET_KEY"

上記のファイルは.confで終わる必要があります。これには、すべての本番環境固有の構成があり、jarに存在しますoutside jarであるため、すべてのサーバーに同一のAkkaアーティファクトをデプロイします。 application.conf内のすべてをオーバーライドします。

次に、起動スクリプトで:

Java -Dconfig.file=/full/path/deploy_prod.conf -jar your.jar com.your.Main
4
Joseph Lust