2013-05-27 44 views
3

因爲akka 2.1.4使用了typesafe配置,所以它只會覆蓋我通過命令行拋出的任何-D參數,就像play framework一樣。事實證明,它似乎並沒有那樣工作。只要添加-Dakka.remote.netty.port=2552,在添加到命令行時不會真正改變任何內容。我必須啓用任何操作才能覆蓋工作嗎?Akka不會用命令行參數覆蓋application.conf

附加信息:我試圖在的IntelliJ發射,並與java -cp app.jar -Dakka.remote.netty.port=2552使用-D參數做一個sbt assembly

回答

6

好了之後,我發現我在做什麼錯。看起來,只有application.conf的一部分被加載時,覆蓋不起作用。

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 
    } 
    } 
} 
當您通過 配置男主角系統只從application.conf這樣加載特定部分不能覆蓋與 -Dakka.remote.netty.port=2553的網狀口

在這種情況下,儘管您指定「客戶端」作爲要加載的子部分,但您仍需要預先將「客戶端」作爲您的值的鍵,以便使用命令行參數覆蓋它們。

請注意,雖然這樣配置文件中的值不會被「client」預先加載。因此,通過使用-Dclient.akka.remote.netty.port=2553,您可以按照習慣進行有效覆蓋。

+1

「您只能通過加載特定部分來覆蓋netty端口......」。這裏沒有錯。將'client'添加到conf文件後,您還應該將其添加到java選項。因此,而不是Dakka.remote.netty.port = 2553你應該嘗試-D **客戶**。akka.remote.netty.port = 2553'。 – Cherry

3

我遇到了同樣的問題。我正在使用'java -jar project.jar -Dblah = whatever'來運行不覆蓋conf文件的項目。但是,'java -jar -Dblah =任何project.jar'都覆蓋了conf文件。