Akka不会使用命令行参数覆盖application.conf

时间:2013-05-27 16:50:19

标签: scala akka scala-2.10

我认为既然akka 2.1.4使用了typesafe配置,它只会覆盖我通过命令行抛出的任何-D参数,就像播放框架一样。事实证明它似乎没有这样的方式。添加-Dakka.remote.netty.port=2552只是在添加到命令行时并没有真正改变任何内容。我是否必须启用任何内容才能使覆盖工作?

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

2 个答案:

答案 0 :(得分:6)

好吧,我发现我做错了什么。当只加载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”作为键的前缀,使用命令行参数覆盖它们。

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

答案 1 :(得分:3)

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