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

时间:2017-04-20 10:35:28

标签: java akka actor properties-file hocon

在我的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文件中不正确。请建议将其放入.properties文件中的正确方法。

2 个答案:

答案 0 :(得分:0)

我知道你想要一个属性文件,虽然我不认为你可以用这种方式声明一个键,并且还记得你手中有一个强大的配置工具。

我建议将所有默认应用程序配置放在reference.conf中并使用application.conf覆盖,这样您就可以在类路径上删除特定application.conf以便在{{1}上进行测试}。

这可能是您的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" } } 时,所有文件都将合并为一个配置。

我建议您详细了解如何配置和覆盖配置:http://doc.akka.io/docs/akka/current/general/configuration.html#Configuring_multiple_ActorSystem

答案 1 :(得分:-1)

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确实是不可能的。