首页 > 解决方案 > 如何从 springboot 服务运行 CMD 命令?

问题描述

我可以通过普通的 java 类运行相同的代码。但是,当我将相同的代码移动到 springboot 中的服务类,并在点击 url 时从控制器调用服务时,该命令不会运行或卡住很长时间。

    Process process = new ProcessBuilder("CMD", "/C", command2).start();
    .
    .
    .
    process.waitFor();
    process.destroy();

尝试了很多次和不同的方法,仍然无法找到解决方案。

命令是

"tool --f pathToFile".

标签: javaspringspring-bootcmd

解决方案


尝试使用单独的参数,不要使用整个命令,而是将其分解为单独的参数,如下所示:

try {
            List<String> commands = new ArrayList<>();
            commands.add("CMD");
            commands.add("/C"); 
            commands.add("tool");
            commands.add("--f");  
            commands.add(pathToFile);
            ProcessBuilder pb = new ProcessBuilder(commands);
             try {
                    Process p = pb.start();
                    int j = p.waitFor();
                    int exitValue = p.exitValue();
                    System.out.println("Finished with code: " + j);
                    System.out.println("Finished with exitValue: " + exitValue);
                } catch (Exception e) {
                    System.out.println("exception: " + e);
                }
        } catch (Exception e) {
            e.printStackTrace();
        }

推荐阅读