2016-02-25 1 views
2

Les quelques sujets que je peux trouver à ce sujet sont pour Scala, plutôt que pour Java, et aucun pour les acteurs distants.akka java programatic override configuration

Je dispose d'un fichier de configuration de base (SERVER_CONFIG_FILE):

Include "akka-common" 

TheSystem { 
    akka { 
    actor { 
     provider = "akka.remote.RemoteActorRefProvider" 
     deployment { 
      /OtherSupervisor { 
      remote = "akka://[email protected]:8553" 
      } 
     } 
     } 
    remote { 
     transport = "akka.remote.netty.NettyRemoteTransport" 
     netty { 
     hostname = "127.0.0.1" 
     port = 8552 
     } 
    } 
    } 
} 

Je veux le charger dans mon programme, puis remplacer plusieurs paramètres, mais je ne peux pas comprendre le code. Quelque chose comme:

private final Config serverConfig = ConfigFactory.load(SERVER_CONFIG_FILE).withValue...? 

je dois remplacer la valeur de "Akka: //[email protected]: 8553", ainsi que le nom d'hôte. Je pense que le nom d'hôte peut être adressé par "ComparisonSystem.akka.remote.netty.hostname", mais une confirmation aiderait.

Je ne sais vraiment pas comment aborder la première valeur, ni ce que Java appelle pour l'amener à se réunir. Je peux apprendre d'un exemple que je peux voir, mais pas de la Scala que je trouve, et rien n'aborde ce nom d'acteur dans le chemin.

Merci d'avance.

Répondre

2

Vous pouvez le faire comme cela, notez que vous utilisez l'instance Config avec overrides et laissez-fallback à votre configuration par défaut plutôt que l'inverse:

Config overrides = ConfigFactory.parseString("some.setting=a-value"); 
Config actualConfig = overrides.withFallback(ConfigFactory.load()); 

Ou si vous ne l'aimez pas les chaînes de construction vous pouvez utiliser les propriétés pour spécifier vos remplacements:

Properties properties = new Properties(); 
properties.setProperty("some.setting", "a-value"); 
Config overrides = ConfigFactory.parseProperties(properties); 
Config actualConfig = overrides.withFallback(ConfigFactory.load());