在我的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文件中的正确方法。
答案 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
确实是不可能的。