Сценарий выполнения Java в Tomcat - PullRequest
0 голосов
/ 13 ноября 2018

Я создал весенний загрузочный проект, который я запускаю на локальном tomcat (я планирую развернуть его на веб-сервере).В рамках этого проекта я создал rest-сервис, который должен выполнять файл .bat.

мои остальные службы выглядят так (ни одна из них не работает)

@RequestMapping(value = "/esc", method= RequestMethod.GET)
public String esc() throws IOException, InterruptedException {
      String folder = "P:\\Documents\\testcmd";
    String[] cmdarray = new String[]{"cmd -c","dosomething.cmd"};
    ProcessBuilder processBuilder = new ProcessBuilder( cmdarray );
    processBuilder.directory(new File(folder));
    Process process = processBuilder.start();

    int exitCode = -1;
    boolean finished = false;
    while ( !finished ) {
        exitCode = process.waitFor();
        finished = true;
    }
    return folder;
}

@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
    //final String shCmd = "/bin/bash -c helloworld.sh";
    System.out.println("Working Directory = " +
            System.getProperty("user.dir"));
    final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd";
    String output = executeCommand(shCmd);

    return output;
}
private String executeCommand(String command){
    Process p;
    InputStream in = null;
    String value = "";
    try {
        p = Runtime.getRuntime().exec(command);
        in = p.getInputStream();
        int ch;
        while((ch = in.read()) != -1) {
            value = String.valueOf((char)ch);
        }
    }catch (IOException e){
        e.printStackTrace();
    }
    return value;
}

Я пробовал это с помощью компоновщика процессов и во время выполнения.Файл, который я хочу выполнить, находится в этой папке: «P: \ Documents \ testcmd»

Можно ли даже выполнить локальный файл с сервером Tomcat?

1 Ответ

0 голосов
/ 14 ноября 2018

Я решил проблему.Раствор с Runtime.getRuntime().exec(command) был правильным.Только мой системный вызов был неправильным.Вместо final String shCmd = "cmd -c P:/Documents/testcmd/dosomething.cmd"; мне пришлось использовать "P:/Documents/testcmd/dosomething.cmd".Кроме того, мне пришлось изменить dosomething.cmd, потому что это было неправильно.При выполнении простого Java-кода файл откроет терминал cmd, а затем напечатает привет в бесконечном цикле.Я изменил содержимое файла, который вместо бесконечного цикла в терминале выводит привет в другой файл.

// method is mapped on root/ex
@RequestMapping(value = "/ex", method= RequestMethod.GET)
public String executeShellScript(){
    System.out.println("Working Directory = " +
            System.getProperty("user.dir"));
    final String shCmd = "P:\\Documents\\testcmd\\dosomething.cmd -c";
    String output = executeCommand(shCmd);

    return output;
}

пакетный файл до и после

@echo off
:start
echo hallo
pause
goto start

после

@echo off
@echo This is a test>> P:/Documents/testcmd/file.txt
@echo 123>> P:/Documents/testcmd/file.txt
@echo 245.67>> P:/Documents/testcmd/file.txt
...