首页 > 解决方案 > 在 Spring Batch 作业中使用 Java ProcessBuilder - Tasklet

问题描述

我正在尝试使用 Java ProcessBuilder 执行带有参数的终端命令。此代码是在作为作业的一部分执行的 Java Spring Batch Tasklet 中编写的。

尽管使用下面的代码正确初始化了它,但当进程构建器尝试读取我的命令参数时,我收到了一个空指针异常。这很奇怪,似乎我缺少一些基本的东西。

使用 Process Builder 的代码

if (getActiveProfile().equals("test")) {
                        builder = new ProcessBuilder("somecommand",
                                "create", "-nr", "-c", configPath, "--tags", tags, name);
                    } else {
                        builder = new ProcessBuilder("somecommand",
                                "create", "-c", configPath, "--tags", tags, name);
                    }

                    Process p = builder.start();

这是显示错误的地方:

public Process start() throws IOException {
        // Must convert to array first -- a malicious user-supplied
        // list might try to circumvent the security check.
        String[] cmdarray = command.toArray(new String[command.size()]);
        cmdarray = cmdarray.clone();

        for (String arg : cmdarray)
            if (arg == null)
                throw new NullPointerException();

上面的代码片段来自 ProcessBuilder 类。有谁知道出了什么问题?

标签: spring-batchprocessbuilderspring-batch-taskletspring-batch-job-monitoring

解决方案


推荐阅读