如何在application.conf上引用.properties值

时间:2014-06-30 12:25:17

标签: java akka akka-remote-actor

我有一个使用自定义actor系统的J2EE应用程序,我需要外化一些自定义配置。

有办法做到这一点吗?由于application.conf总是在类路径上,所以无论如何我可以加载外部custom.properties文件并使用它如下所示

ActorSystem.akka.remote.netty.hostname = "${custom.ip}"
ActorSystem.akka.remote.netty.port = "${custom.port}"

1 个答案:

答案 0 :(得分:3)

我不完全确定你的约束是什么,但原则上你有几个选择:

  1. 您可以在创建演员系统时为演员系统提供硬编码配置,如下所示:

    Map configMap = new HashMap();
    configMap.put("akka.remote.netty.hostname", custom.ip);
    configMap.put("akka.remote.netty.port", custom.port);
    
    Config config = ConfigFactory.parseMap(configMap).withFallback(ConfigFactory.load());
    ActorSystem system = ActorSystem.create("ActorSystem", config);
    
  2. 您可以通过代码application.conf或通过设置系统属性ConfigFactory.load("custom.conf")并在-Dconfig.resource=custom.conf中加载application.conf来加载自定义配置文件而不是custom.conf {1}},像这样:

    include "application"
    akka.remote.netty.hostname = "custom-ip"
    akka.remote.netty.port = "custom-port"
    
  3. 您还可以提供自定义端口和ip through系统属性,并使用默认值(如果未定义)。在这种情况下,application.conf将如下所示:

    akka.remote.netty.hostname = "default-ip"
    akka.remote.netty.port = "default-port"
    akka.remote.netty.hostname = "${?custom.ip}"
    akka.remote.netty.port = "${?custom.port}"
    
  4. 或者您可以在custom.properties文件中加入application.conf。如果custom.properties不存在则会被忽略。 application.conf

    akka.remote.netty.hostname = "default-ip"
    akka.remote.netty.port = "default-port"
    include "custom"
    

    custom.properties

    akka.remote.netty.hostname = "custom-ip"
    akka.remote.netty.port = "custom-port"