【问题标题】:Overriding multiple config values in Typesafe config when using an uberjar to deploy使用 uberjar 部署时覆盖 Typesafe 配置中的多个配置值
【发布时间】:2014-09-17 22:49:35
【问题描述】:

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

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

【问题讨论】:

    标签: scala deployment sbt akka typesafe-config


    【解决方案1】:

    有多种方法可以实现:

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

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

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

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

    5. 目前最简单的就是用-Dconfig.resource=/dev.conf java 命令行参数选择另一个文件。

    更多详情请参考官方文档here

    【讨论】:

    • 谢谢你,Aleksey。您的回复将我指向-Dconfig.file=...,这就是我所追求的。
    【解决方案2】:

    我们在 prod 中这样做:

    #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 中,因此您可以将相同的 Akka 工件部署到所有服务器。它将覆盖application.conf 中的任何内容。

    然后在启动脚本中:

    java -Dconfig.file=/full/path/deploy_prod.conf -jar your.jar com.your.Main
    

    【讨论】:

      【解决方案3】:

      我能够以编程方式覆盖默认的 akka 配置:

      val customConf =
            ConfigFactory.parseString(s"""
                  akka {
                    persistence.snapshot-store.local{
                      dir = target/snapshot
                    }
                    persistence.journal.leveldb.dir = target/journal
                  }
              """)
      val config = customConf.withFallback(original).resolve()    
      logger.info(config.root().render())
      val system = ActorSystem("iSystem", config)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-24
        • 2019-02-15
        • 2018-05-24
        • 2019-08-27
        • 1970-01-01
        • 2021-08-23
        • 2020-01-07
        • 1970-01-01
        相关资源
        最近更新 更多