2017-05-24 3 views
1

Est-il possible de modifier ou de créer un fichier de configuration à partir du code source? Je crée une architecture client/serveur avec un accès distant. Ce que je veux accomplir est la capacité de démarrer l'application cliente avec par exemple: hôte/port et quand il n'y a pas encore de fichier de configuration pour en créer un remplissant les arguments de la ligne de commande.Akka modification/création d'un fichier de configuration à partir du code source

akka { 
    actor { 
    provider = remote 
    } 
    remote { 
    enabled-transports = ["akka.remote.netty.tcp"] 
    netty.tcp { 
     hostname = "127.0.0.1" <--- here 
     port = 2553 <--- here 
    } 
    } 
} 

Les configurations ne sont pas vraiment compliquées. Je veux changer de source juste le port (finalement l'hôte, pour l'instant c'est de toute façon localhost pour les tests) pour l'automatiser un peu afin que je puisse courir plusieurs clients juste en les passant à la fonction principale.

Répondre

3

Oui, vous pouvez modifier ou créer la configuration dans le code. Les extraits suivants sont tirés du Akka documentation:

Un exemple de modification d'une configuration par programme:

// make a Config with just your special setting 
Config myConfig = ConfigFactory.parseString("something=somethingElse"); 

// load the normal config stack (system props, then application.conf, then reference.conf) 
Config regularConfig = ConfigFactory.load(); 

// override regular stack with myConfig 
Config combined = myConfig.withFallback(regularConfig); 

// put the result in between the overrides (system props) and defaults again 
Config complete = ConfigFactory.load(combined); 

// create ActorSystem 
ActorSystem system = ActorSystem.create("myname", complete); 

Un exemple de créer une configuration par programme (ce qui est à Scala, mais vous pouvez l'adapter pour Java):

import akka.actor.ActorSystem 
import com.typesafe.config.ConfigFactory 

val customConf = ConfigFactory.parseString(""" 
    akka.actor.deployment { 
    /my-service { 
     router = round-robin-pool 
     nr-of-instances = 3 
    } 
    } 
""") 

// ConfigFactory.load sandwiches customConfig between default reference 
// config and default overrides, and then resolves it. 
val system = ActorSystem("MySystem", ConfigFactory.load(customConf))