akka java程序覆盖配置

时间:2016-02-25 12:49:53

标签: java configuration akka typesafe-config

我能找到的关于Scala的几个主题是针对Scala,而不是Java,没有一个针对远程演员。

我有一个基本配置文件(SERVER_CONFIG_FILE):

Include "akka-common"

TheSystem {
  akka {
    actor {
      provider = "akka.remote.RemoteActorRefProvider"
        deployment { 
          /OtherSupervisor {
            remote = "akka://OtherSystem@127.0.0.1:8553"
          }
        }
      }
    remote {
      transport = "akka.remote.netty.NettyRemoteTransport"
      netty {
        hostname = "127.0.0.1"
        port = 8552
      }
    }
  }
}

我想在我的程序中加载它,然后覆盖几个设置,但我无法弄清楚代码。类似的东西:

private final Config serverConfig = ConfigFactory.load(SERVER_CONFIG_FILE).withValue...?

我需要覆盖" akka://DroneSystem@127.0.0.1:8553"的值,以及主机名。我认为主机名可以通过" ComparisonSystem.akka.remote.netty.hostname"来解决,但确认会有所帮助。

我真的不知道如何解决第一个值,也不知道java调用什么来使它结合在一起。我可以从我能看到的一个例子中学习,但不是从我找到的Scala中学习,并且没有任何地址在路径中具有该Actor名称。

提前致谢。

1 个答案:

答案 0 :(得分:3)

你可以这样做,请注意你使用覆盖的Config实例并让它回退到你的默认配置而不是相反:

Config overrides = ConfigFactory.parseString("some.setting=a-value");
Config actualConfig = overrides.withFallback(ConfigFactory.load());

或者,如果您不喜欢构建字符串,可以使用属性来指定覆盖:

Properties properties = new Properties();
properties.setProperty("some.setting", "a-value");
Config overrides = ConfigFactory.parseProperties(properties);
Config actualConfig = overrides.withFallback(ConfigFactory.load());