Java - MultiThreading - случайный сбой (код выхода 255) при отправке команды CLPPLUS в cmd
Я работаю с данными из нескольких разных баз данных / среды (в данном случае с DB2). Работа носит общий характер, поэтому я хотел бы ускорить процесс, применив один и тот же сценарий к нескольким средам и одновременно объединяя результаты.
Это код, который я должен реализовать для многопоточности.
public static void main(String[] args) throws Throwable {
ExecutorService es = Executors.newCachedThreadPool();
es.execute(new MultiThreadDataExtract(dataPoolMap, "env1"));
es.execute(new MultiThreadDataExtract(dataPoolMap, "env2"));
es.shutdown();
es.awaitTermination(1, TimeUnit.HOURS);
}
Это моя утилита командной строки, используемая для отправки команды в CLPPLUS.
public class CommandLineUtil extends TestcaseKeyword {
Process proc;
int exitVal;
public void runCommand(String command) {
try {
proc = new ProcessBuilder("cmd.exe", "/c", command).start();
exitVal = proc.waitFor();
System.out.println("Exit value: " + exitVal);
} catch (Exception ex) {
logger.info(ex.toString());
}
}
Наконец, класс Runnable для форматирования команды перед ее отправкой в утилиту командной строки.
public class MultiThreadDataExtract extends PropertiesVariables implements Runnable {
CommandLineUtil commandUtil = new CommandLineUtil();
String env;
Map<String, String> datapool;
public MultiThreadDataExtract(Map<String, String> datapool, String env) {
this.env = env;
this.datapool = datapool;
}
@Override
public void run() {
tableExtraction(datapool, env);
}
public void tableExtraction(Map<String, String> datapool, String env) {
//format the command based on the input datapool map
//and properties variable from PropertiesVariables and execute it base on a defined enviroment
//then send the command to the subprocess
commandUtil.executeScript(command);
}
}
Это пример команды при использовании CLPPLUS на удаленном сервере DB2:
clpplus id/pwd@1.1.1.1:50000/dbname @pathToSQLScript
Вот где возникает проблема:
Иногда он работает отлично, запустив две командные строки и два подпоследовательности окна clpplus и запустив sql-скрипт.
Иногда один поток немедленно завершается и выводит значение выхода 255. Другой поток будет продолжать работу, как обычно.
Что я пробовал:
- Я пробовал запускать простые команды, такие как "эхо-тестирование" или "dir", которые работали нормально (15+ последовательного выполнения)
Изучение кода ошибки для DB2 дает сбой этого задания с кодом выхода 255 на хостах выполнения Windows
- Что мне показалось странным, так это то, что я могу вызывать cmd.exe каждый раз для выполнения более простых команд, поэтому я не думаю, что это проблема с разрешением, как указано в ссылке
Связано ли это с тем, как я управляю созданием своих потоков? Или это вещь CLPPLUS?
Любое понимание будет очень признательно.:)