如何在Scala WorkSheet和Akka中引用配置文件?

时间:2018-07-09 11:11:39

标签: scala akka config worksheet

我正在尝试在Scala工作表中创建一个简单的akka​​系统,但是每次尝试,都会出现此错误。

com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'akka'
at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(tsets.sc:148)
at com.typesafe.config.impl.SimpleConfig.findKey(tsets.sc:141)
at com.typesafe.config.impl.SimpleConfig.findOrNull(tsets.sc:168)
at com.typesafe.config.impl.SimpleConfig.find(tsets.sc:180)
at com.typesafe.config.impl.SimpleConfig.find(tsets.sc:185)
at com.typesafe.config.impl.SimpleConfig.getString(tsets.sc:242)
at akka.actor.ActorSystem$Settings.<init>(tsets.sc:166)
at akka.actor.ActorSystemImpl.<init>(tsets.sc:533)
at akka.actor.ActorSystem$.apply(tsets.sc:139)
at akka.actor.ActorSystem$.apply(tsets.sc:116)
at #worksheet#.system$lzycompute(tsets.sc:9)
at #worksheet#.system(tsets.sc:9)
at #worksheet#.get$$instance$$system(tsets.sc:9)
at A$A9$.main(tsets.sc:35)
at #worksheet#.#worksheet#(tsets.sc)

即使Scala工作表与application.conf文件位于完全相同的目录中。

该文件的akka​​条目看起来像这样。

akka {
  loglevel = ??
  actor {
    provider = ??
 }
 remote {
log-remote-lifecycle-events = ??
enabled-transports =??
netty.tcp {
  hostname = ??
  port = ??
  maximum-frame-size = ??
  maximum-frame-size = ??
  send-buffer-size = ??
  send-buffer-size = ??
  receive-buffer-size = ??
  receive-buffer-size = ??
}
  }

  cluster {
roles = ["frontend"]
seed-nodes = ??
use-dispatcher = c??

failure-detector {
  threshold = ??
  acceptable-heartbeat-pause = ??
  heartbeat-interval = ??
  heartbeat-request {
    expected-response-after = ??
  }
  }
 }
}

我什至尝试将其添加到build.sbt

assemblyMergeStrategy in assembly := {
  case PathList("application.conf") => MergeStrategy.concat
}

1 个答案:

答案 0 :(得分:2)

一种可能的变体是用ConfigFactory.parseFile调用resolve(如果您在配置文件中有一些类似receive-buffer-size = ${send-buffer-size}的替换字):

val confPath = getClass.getResource("/application.conf")
val config = ConfigFactory.parseFile(new File(confPath.getPath)).resolve()
config.getString("akka.loglevel")

您的application.conf文件应该位于resources文件夹中,并且您的工作表可以放在scala文件夹中。

更新

如果使用Intellij IDEA。为此workaround

  1. 转到文件>设置>语言和框架> Scala>工作表
  2. 取消选中“在编译器进程中运行配置” ,然后按“确定”

enter image description here

因此您可以自由使用ConfigFactory.load()

enter image description here

我使用的IDEA版本为 2018.1.5