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