运行Akka Microkernel时获取命令行参数?

时间:2013-04-08 20:41:07

标签: scala command-line akka microkernel

我有以下Akka microkernel

class ServiceKernel extends Bootable {

  val system = ActorSystem("service-kernel")

  def startup = {
    system.actorOf(Props(new Boot(false))) ! Start
  }

  def shutdown = {
    system.shutdown()
  }
}

因为内核扩展Bootable而不是App,我如何访问启动内核时使用的命令行参数?例如,如果我使用start namespace.ServiceKernel -d rundevmode或类似的方式运行内核。谢谢!

其他信息

我认为值得在微内核中添加有关启动脚本的信息。在/bin/start中,您会注意到以下内容:

#!/bin/sh

AKKA_HOME="$(cd "$(cd "$(dirname "$0")"; pwd -P)"/..; pwd)"
AKKA_CLASSPATH="$AKKA_HOME/config:$AKKA_HOME/lib/*"
JAVA_OPTS="-Xms256M -Xmx512M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2"

java $JAVA_OPTS -cp "$AKKA_CLASSPATH" -Dakka.home="$AKKA_HOME" akka.kernel.Main "$@"

尽管om-nom-nom最初提出了-D个选项,但看起来它正在使用中,并且主要的启动参数被传递给akka.kernel.Main类(在这种情况下将是{ {1}}上面的课程。)

2 个答案:

答案 0 :(得分:3)

这是最小的例子:

object Foo extends App {
    val debugModeOn = System.getProperty("debugmode") != null
    val msg = if (debugModeOn) "in debug mode" else "not in debug mode"
    println(msg)
}

» scala Foo -Ddebugmode
in debug mode
» scala Foo            
not in debug mode

您可以进行额外检查以解决此问题:

» scala Foo -Ddebugmode=false
in debug mode

P.S。您可能还想使用Properties helper,其中包含一系列方法,如propOrNone,propOrElse等

答案 1 :(得分:0)

在sh脚本中,它们为您提供了提供JAVA_OPTS的机会,如果没有,它们会为您提供他们预先定义的一个。我想你可以在脚本中设置JAVA_OPTS然后调用这个脚本,为JAVA_OPTS中的自定义args指定-D选项。这样,您可以确保通过指定的-D系统属性传递自定义args。哈金,但我认为它应该有效。 -D的优点在于您可以提供任意数量的内容,因此它们已经将它用于某些自己的系统属性这一事实无关紧要。