我认为既然akka 2.1.4使用了typesafe配置,它只会覆盖我通过命令行抛出的任何-D参数,就像播放框架一样。事实证明它似乎没有这样的方式。添加-Dakka.remote.netty.port=2552
只是在添加到命令行时并没有真正改变任何内容。我是否必须启用任何内容才能使覆盖工作?
其他信息:我尝试在执行java -cp app.jar -Dakka.remote.netty.port=2552
后使用Intellij启动器中的-D参数和sbt assembly
答案 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文件。