使用uberjar进行部署时,在Typesafe配置中覆盖多个配置值

Sou*_*nta 15 deployment scala sbt akka typesafe-config

我有一个Akka应用程序,它使用了多个配置值(IP地址,端口号)resource/application.conf.我正在使用sbt-assembly插件创建一个超级jar然后部署这个jar.

有没有办法application.conf通过使用uber jar之外的另一个文件来覆盖整个文件?(即,使用新conf文件中的值)

yǝs*_*ǝla 26

有多种方法可以实现这一目标:

  1. 您可以设置一个类路径以包含application.conf在外部目录中,并在其他类路径条目(如jar)之前显示在类路径中.为此,您可以使用常规java -classpath myconfdir:theapp.jar并明确指定主类.

  2. 您也可以include "application"在conf文件中使用指令将另一个conf文件包含到您的文件中.

  3. 您可以设置环境变量application.conf,指向要包含的文件.之后你在shell中设置了env.

  4. 您可以通过编程方式覆盖值:config.withValue("hostname", ConfigValueFactory.fromAnyRef("localhost").ActorSystem如果没有提供,则从默认conf中获取Conf对象或加载.

  5. 到目前为止最简单的方法是使用-Dconfig.resource=/dev.confjava命令行参数选择另一个文件.

有关详细信息,请参阅此处的官方文档.

  • 谢谢你,阿列克谢.你的回答指出我在`-Dconfig.file = ...`这就是我所追求的. (5认同)

Jos*_*ust 5

我们在产品中这样做:

#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"
Run Code Online (Sandbox Code Playgroud)

上述文件必须以.conf. 它具有所有生产环境特定的配置,并且位于jar之外,因此您可以将相同的 Akka 工件部署到所有服务器。它将覆盖application.conf.

然后在启动脚本中:

java -Dconfig.file=/full/path/deploy_prod.conf -jar your.jar com.your.Main
Run Code Online (Sandbox Code Playgroud)