【问题标题】:Akka won't override application.conf with command line parametersAkka 不会使用命令行参数覆盖 application.conf
【发布时间】:2013-05-27 16:50:19
【问题描述】:

我认为由于 akka 2.1.4 使用类型安全配置,它只会覆盖我通过命令行向它抛出的任何 -D 参数,就像 play 框架一样。事实证明它似乎不是那样工作的。仅添加 -Dakka.remote.netty.port=2552 在添加到命令行时并不会真正改变任何内容。我是否必须启用任何东西才能使覆盖起作用?

附加信息:我尝试在 Intellij 启动器中使用 -D 参数,并在执行 sbt assembly 后使用 java -cp app.jar -Dakka.remote.netty.port=2552

【问题讨论】:

    标签: scala akka scala-2.10


    【解决方案1】:

    好吧,我发现我做错了什么。当仅加载 application.conf 的一部分时,似乎覆盖不起作用。当您通过 仅从 application.conf 加载特定部分 来配置 Actor 系统时,您不能使用 -Dakka.remote.netty.port=2553 覆盖 netty 端口,如下所示:

    val system = ActorSystem("myActorSystem",ConfigFactory.load.getConfig("client"))
    

    application.conf 文件:

    client{
      akka {
    
      log-config-on-start = on
       loglevel = "INFO"
       actor {
          provider = "akka.remote.RemoteActorRefProvider"
          include "serialization.conf"
       }
    
       remote {
        transport = "akka.remote.netty.NettyRemoteTransport"
        netty {
          hostname = "127.0.0.1"
          port = 2552
        }
        log-sent-messages = off
        log-received-messages = off
       }
      }
    }
    

    在这种情况下,尽管您将“client”指定为要加载的子部分,但您仍必须将“client”作为您的值的键,这将通过使用命令行参数覆盖它们。

    但请注意,配置文件中的值在以这种方式加载时不会由“客户端”添加。因此,通过使用-Dclient.akka.remote.netty.port=2553,您可以像习惯一样有效地覆盖。

    【讨论】:

    • "你不能用 ... 覆盖 netty 端口,只加载一个特定的部分"。这里没有错。将 client 添加到 conf 文件后,您还应该将其添加到 java 选项。因此,您应该尝试使用 -Dclient.akka.remote.netty.port=2553`,而不是 Dakka.remote.netty.port=2553。
    • 如果某些环境定义,也可以在命令中指定:例如:port = ${?PORT} 命令:-DPORT=8081
    【解决方案2】:

    我遇到了同样的问题。我使用'java -jar project.jar -Dblah=whatever'来运行没有覆盖conf文件的项目。但是,'java -jar -Dblah=whatever project.jar' 确实覆盖了 conf 文件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多