Java 服务包装器和附加的应用程序命令行参数

标签 java java-service-wrapper

我目前正在使用 java service wrapper包装我开发的 Java 应用程序。我需要能够通过 Java 服务包装器将额外的命令行参数传递到我的应用程序。

假设我的应用名为 myapp,并且我已经设置了 java 服务包装器,以便我运行以启动的脚本名为 myapp。我希望能够做这样的事情:

./myapp start Parameter1 parameter2

并将这些附加参数传递到我的应用程序中。任何想法如何做到这一点?我发现谷歌搜索和查看文档只是提取如何使用命令行参数来设置 java 服务包装器。除了将它们硬编码在您的 wrapper.conf 文件中之外,我很难找到任何有关将命令行参数传递给您的应用程序的信息。

现在我觉得我的选择是采用额外的命令行参数,将它们设置为环境变量并将这些参数硬编码到 wrapper.conf 中。不过,我不想走那条路,希望我忽略了一些事情。

最佳答案

在包装器的 3.5.2 版本中,我们添加了一种可能性来实现您的要求,方法是在 java 应用程序的参数前使用“--”: https://sourceforge.net/tracker/?func=detail&aid=3017567&group_id=39428&atid=425190

这基本上可以直接调用包装器的二进制文件,但是对于 shell 脚本,您可以通过稍微修改它来轻松实现相同的目的:

打开脚本并在 console()、start()(和可选的 launchdinternally())中将 command_line 设置为以下内容:

    COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $LOCKPROP $@"

注意最后的 $@。

现在,转到脚本的末尾,它决定应该调用什么函数(控制台、启动、停止、重新启动等)

在“console”、“start”(和“launchdinternal”)中设置一个 shift 并将参数从命令行传递给函数:

'console')
    checkUser touchlock $1
    shift
    console $@
    ;;

'start')
    if [ "$DIST_OS" = "macosx" -a -f "/Library/LaunchDaemons/${APP_PLIST}" ] ; then
        macosxstart
    else
        checkUser touchlock $1
        shift
        start $@
    fi
    ;;

.. '启动内部')

    shift
    launchdinternal $@
    ;;

之后,你可以这样调用脚本:

./script start|console -- para1 para2 ...

希望这对你有帮助。

干杯, 基督徒

关于Java 服务包装器和附加的应用程序命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038763/

相关文章:

java - 在没有代码的情况下持续获取 NullPointerException

java - ObservableList 不更新 ArrayList

java - JVM挂起是什么意思?

java - Youtrack 6 重启在 Fedora 和 Java Service Wrapper 上失败

Java - 无法在具有完全写入权限的共享文件夹上创建文件

java - Java包装器作为守护程序

java - GAE : Slow delayed requests

java - 如何在JFrame上绘图

java - 捕获原始集合类型的 Sonar 规则

java - 使用 Tanuki Service Wrapper 包装 Spring Boot 应用程序