AKKA .conf 文件配置到 .properties 文件

AKKA .conf file configuration to .properties file

在我的 test.conf 文件中,我有以下配置

akka {
  actor {
    provider = "akka.cluster.ClusterActorRefProvider"

    serializers {
       java = "akka.serialization.JavaSerializer"
    }

    serialization-bindings {
        "java.io.Serializable" = "kyro"
    }
  }
}

我正在尝试将此配置放入 test.properties 文件中作为

akka.actor.provider=akka.cluster.ClusterActorRefProvider
akka.actor.serializers.java=akka.serialization.JavaSerializer
akka.actor.serialization-bindings."java.io.Serializable" = kryo

当我使用 test.conf 文件创建和 AKKA ActorSystem 时,它工作正常,但是当我使用 test.propeties 文件作为

创建 ActorSytem 时
System.setProperty("config.file", "test.properties");
Config config = ConfigFactory.load();
ActorSystem testactor = ActorSystem.create("testactor", config);

这里我得到 java ClassNotFoundExcpetion : "java

我看到我将 akka.actor.serialization-bindings."java.io.Serializable" 放入 test.properties 文件的方式不是 correct.Please 建议将其放入 .properties 文件的正确方法.

我知道您需要一个属性文件,但我认为您不能以这种方式声明密钥,而且请记住您手中有一个强大的配置工具。

我建议将所有默认应用程序配置放在 reference.conf 中并使用 application.conf 覆盖,因此您只需将特定的 application.conf 放在类路径中以在 test/resources.

这可能是你的 java/resources/reference.conf:

akka {
 actor {
  provider = "akka.cluster.ClusterActorRefProvider"

   serializers {
    java = "akka.serialization.JavaSerializer"
   }

  serialization-bindings {
   "java.io.Serializable" = "kyro"
  }
 }
}

然后你把它放在 test/resources/application.conf 或任何你需要测试的东西上:

akka {
  serialization-bindings {
   "java.io.Serializable" = "java"
  }
} 

当您调用 ConfigFactory.load() 时,所有文件都将合并到一个配置中。

我建议阅读更多关于如何配置和覆盖配置的信息:http://doc.akka.io/docs/akka/current/general/configuration.html#Configuring_multiple_ActorSystem

Typesafe 配置库允许加载属性对象和组合配置,因此您可以:

// or load it from a file using whatever logic you want
Properties properties = new Properties();
properties.setProperty("some.setting", "a-value");

Config propConfig = ConfigFactory.parseProperties(properties);
Config actualConfig = propConfig.withFallback(ConfigFactory.load("test.conf"));
ActorSystem.create("name", actualConfig);

更新:正如 Leo 在评论中指出的那样,如果您想覆盖 akka.actor.serialization-bindings."java.io.‌​Serializable",据我所知,由于引号的缘故,Properties 确实是不可能的。