Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 结合Akka配置和我的配置_Scala_Akka - Fatal编程技术网

Scala 结合Akka配置和我的配置

Scala 结合Akka配置和我的配置,scala,akka,Scala,Akka,我正在编写一个Akka微核应用程序,希望它使用java.net.InetAddress.getLocalHost.getHostAddress确定自己的主机IP。如果此调用成功,则我将使用属性akka.remote.netty.hostname的地址,但如果不成功,我将返回application.config中的值 这在System.setProperty(“akka.remote.netty.hostname”,addr)中正常工作,如中的SimpleClusterApp所示 当我想首先检查a

我正在编写一个Akka微核应用程序,希望它使用
java.net.InetAddress.getLocalHost.getHostAddress
确定自己的主机IP。如果此调用成功,则我将使用属性
akka.remote.netty.hostname
的地址,但如果不成功,我将返回
application.config
中的值

这在
System.setProperty(“akka.remote.netty.hostname”,addr)
中正常工作,如中的
SimpleClusterApp
所示

当我想首先检查application.config中是否设置了其他密钥时,出现了问题。例如,以下内容将无法覆盖主机地址,因为(我认为)对
ConfigFactory.load()
的初始调用意味着后面的
System.setProperty
无效

if(ConfigFactory.load().getBoolean("my-app.do-something")){
    //Do some stuff, then change the host address
    Try{
        java.net.InetAddress.getLocalHost.getHostAddress
    } match {
        case Success(addr) => 
            System.setProperty("akka.remote.netty.hostname", addr)
        case Failure(_) => 
    }
}
我必须使用单独的配置文件来配置自己的应用程序,还是有其他方法来解决上述问题?

调用

ConfigFactory.invalidateCaches()
设置属性之后。这是单元测试中需要记住的一项好技术

或者,使用已解析的配置片段和回退到,如:

def remoteConfig(hostname: String, port: Int, commonConfig: Config): Config = {
  val configStr = s"""
    akka.remote.netty.hostname = $hostname
    akka.remote.netty.port = $port
  """
  ConfigFactory.parseString(configStr).withFallback(commonConfig)
}

val baseConfig = ConfigFactory.load()
val akkaConfig = if (!baseConfig.getBoolean("my-app.do-something")) baseConfig
else
  Try(java.net.InetAddress.getLocalHost.getHostAddress).
    map(remoteConfig(_, 0, baseConfig)).
    getOrElse(baseConfig) 

val system = ActorSystem("foo", akkaConfig)