2017-04-20 2 views
1

In meiner test.conf Datei Datei Ich habe folgende KonfigurationAKKA Conf-Datei Konfiguration .properties

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

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

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

Ich versuche, diese configuation in test.properties Datei zu setzen, wie

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

Wenn ich AKKA ActorSystem unter Verwendung der Datei test.conf erstelle, funktioniert es gut, aber wenn ich ein ActorSytem mit der Datei test.propeties als

Hier erhalte ich Java ClassNotFoundExcpetion: "java

ich die Art, wie ich die akka.actor.serialization-Bindungen setzen seens." Java.io.Serializable“in test.properties Datei wird nicht vorschlagen correct.Please die richtige Möglichkeit, dies in die Datei .properties zu stellen.

Antwort

0

Ich habe verstanden, Sie wollen eine Eigenschaftendatei, obwohl ich glaube nicht, dass Sie einen Schlüssel auf diese Weise deklarieren können und auch daran erinnern, dass Sie ein leistungsfähiges Konfigurationstool in Ihren Händen haben.

Ich würde vorschlagen, alle Konfiguration Ihre Standardanwendung in reference.conf setzen und überschreiben mit application.conf daher können Sie nur auf test/resources zum Testen einer spezifischen application.conf auf Ihrem Classpath fallen.

Dies könnte Ihre java/resources/reference.conf:

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

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

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

Und Sie setzen diese auf test/resources/application.conf oder was auch immer Sie benötigen für die Prüfung:

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

Wenn Sie ConfigFactory.load() rufen alle Dateien in einer Konfiguration zusammengefügt werden.

rate ich mehr darüber, wie die Konfiguration zu konfigurieren und zu überschreiben: http://doc.akka.io/docs/akka/current/general/configuration.html#Configuring_multiple_ActorSystem

+0

Ich möchte nur eine Konfigurationsdatei entweder meine test.conf oder test.properties und nicht beide behalten. Im Falle von test.properties muss ich wissen, wie Serialization-Bindings-Eigenschaft.Wenn dies nicht möglich ist in. Eigenschaftendatei muss ich mit der Datei test.conf gehen –

+0

Ich fürchte, Sie sind in diesem Fall out Option. Bleiben Sie beim hocon-Format. – Leo

+0

Das Überschreiben der standardmäßigen Akka-Konfiguration (der'Akka'-Namespace) darf nicht mit einer 'reference.conf' erfolgen, da dies von der Reihenfolge der Klassenpfade abhängt, wenn diese Einstellungen jemals gesehen werden. – johanandren

-1

Die Typesafe-Konfigurationsbibliothek für Objekte Laden Eigenschaften ermöglicht und die Kombination von configs so könnten Sie tun:

// 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); 

Update: als Leo wies in einem Kommentar darauf hin, wenn man akka.actor.serialization-bindings."java.io.‌​Serializable" außer Kraft setzen will, ist das mit Properties tatsächlich nicht möglich, soweit ich das aufgrund der Zitate sehen kann.

+0

Dies ist keine Option. Er möchte 'akka.actor.serialization-bindings 'außer Kraft setzen." Java.io.Serializable "'. Eigenschaftenschlüssel können keine Zitate afaik haben. – Leo

+1

Sicher können sie: 'properties.put (" akka.actor.serialization-bindings. "Java.io.Serializable \" "," someval ")' funktioniert gut. Es gibt jedoch ein Problem darin, dass die TypeSafe Config-Bibliothek beim Analysieren von Eigenschaften keine Anführungszeichen behandelt, sondern die Punkte im vollständigen Klassennamen als Unter-Namespaces interpretiert und daher für den gegebenen Anwendungsfall nicht funktioniert. – johanandren

+0

Sie haben recht, aber ich bevorzuge einen sauberen Ansatz und umarme HOCON insgesamt. Mein 2c. – Leo