我有以下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}}上面的课程。)
答案 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的优点在于您可以提供任意数量的内容,因此它们已经将它用于某些自己的系统属性这一事实无关紧要。