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

key*_*rai 3 scala akka scala-2.10

我认为,因为akka 2.1.4使用了typesafe配置,它只会覆盖我通过命令行抛出的任何-D参数,就像play框架一样.事实证明它似乎没有这样的方式.添加一个-Dakka.remote.netty.port=2552并没有真正改变任何东西添加到命令行.我必须启用任何可以使覆盖工作的东西吗?

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

key*_*rai 6

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

val system = ActorSystem("myActorSystem",ConfigFactory.load.getConfig("client"))
Run Code Online (Sandbox Code Playgroud)

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

在这种情况下,虽然您将"client"指定为要加载的子部分,但您仍然必须将"client"作为键的前缀,使用命令行参数覆盖它们.

但请注意,当以这种方式加载时,配置文件中的值不会被"client"前置.所以通过使用-Dclient.akka.remote.netty.port=2553你可以像你习惯的那样有效地覆盖.