5

我有下面的Akka 微内核

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类(在这种情况下是ServiceKernel上面的类)。

4

2 回答 2

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

PS 你可能还想使用Properties helper,它包含一堆方法,如 propOrNone、propOrElse 等

于 2013-04-08T21:14:07.847 回答
0

看起来在 sh 脚本中,他们给了你一个提供 JAVA_OPTS 的机会,如果没有,他们给你一个他们预先定义的。我想你可以在一个脚本中设置 JAVA_OPTS,然后调用这个脚本,在 JAVA_OPTS 中为你的自定义参数指定一个 -D 选项。这样,您可以确保您的自定义参数通过您指定的 -D 系统属性传入。Hackish,但我认为它应该工作。-D 的美妙之处在于您可以提供任意数量的内容,因此他们已经将它用于自己的某些系统属性这一事实并不重要。

于 2013-04-24T14:51:05.297 回答