AKKA .conf文件配置的.properties文件
在我test.conf文件我有以下的配置AKKA .conf文件配置的.properties文件
akka {
actor {
provider = "akka.cluster.ClusterActorRefProvider"
serializers {
java = "akka.serialization.JavaSerializer"
}
serialization-bindings {
"java.io.Serializable" = "kyro"
}
}
}
我试图把这个configuation在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绑定的方式。”test.properties文件中的java.io.Serializable“是不正确的。请提示正确方式把它放在.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
类型安全配置库允许加载属性的对象,并结合CONFIGS,所以你可以这样做:
// 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
确实无法实现。
这不是一个选项。他想覆盖'akka.actor.serialization-bindings。“java.io.Serializable”'。属性键不能有引号afaik。 – Leo
当然他们可以:'properties.put(“akka.actor.serialization-bindings。\”java.io.Serializable \“”,“someval”)'工作正常。然而,Typesafe Config库在解析属性时并未特别处理引号,因此它会将整个类名称中的点解释为子名称空间,因此对于给定的用例确实不起作用。 – johanandren
你是对的,但我更喜欢干净的方法,并且完全接受HOCON。我的2c。 – Leo
我想维护只有一个配置文件我的test.conf或test.properties,而不是两者。在test.properties的情况下,我需要知道如何把序列化绑定属性。如果这是不可能的。属性文件我必须去test.conf文件 –
恐怕你在这种情况下没有选择。坚持使用hocon格式。 – Leo
重写默认的Akka配置('akka'命名空间)不能使用'reference.conf'来完成,因为如果这些设置被看到,它将取决于类路径排序。 – johanandren