Akka Java编程通过程序覆盖配置

3

我能找到的关于这个主题的资料都是针对Scala而不是Java,而且没有解决远程actor的问题。

我有一个基础配置文件(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个回答

4

您可以按照以下方式进行操作,注意要使用带有覆盖的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());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接