resource/application.conf
で定義された複数の構成値(IPアドレス、ポート番号)を使用するAkkaアプリケーションがあります。 sbt-Assembly
プラグインを使用してuberjarを作成し、このjarをデプロイしています。
Uber jarの外部にある別のファイルを使用して、application.conf
ファイル全体をオーバーライドする方法はありますか? (つまり、新しいconfファイルの値が使用されます)
これを実現するには、さまざまな方法があります。
外部ディレクトリから_application.conf
_を含めるようにクラスパスを設定し、jarなどの他のクラスパスエントリの前にクラスパスに表示します。これを行うには、通常の_Java -classpath myconfdir:theapp.jar
_を使用して、メインクラスを明示的に指定します。
または、confファイルの_include "application"
_ディレクティブを使用して、別のconfファイルをファイルに含めることもできます。
含めるファイルを指す環境変数を_application.conf
_に設定できます。その後、シェルでenvを設定します。
プログラムで値をオーバーライドできます:config.withValue("hostname", ConfigValueFactory.fromAnyRef("localhost")
。 ActorSystem
は、Confオブジェクトを取得するか、提供されていない場合はデフォルトのconfからロードします。
これまでで最も簡単なは、_-Dconfig.resource=/dev.conf
_ Javaコマンドライン引数を使用して別のファイルを選択することです。
詳細については、公式ドキュメントを参照してください ここ 。
私たちはそのように製品でそれを行います:
#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