Я создал запланированную задачу, которая выполняет вызов внешнего файла .jar, который создает некоторые XML-файлы. Я хочу, чтобы он запускался каждые 4 минуты.Каждый раз, когда запускается внешний .jar, создается новый его экземпляр, но я хочу, чтобы он закрыл существующий и создал новый вместо
. В основном это мой код:
private static void RunInvoiceProcesses(Properties props) {
ScheduledExecutorService executorService =
Executors.newScheduledThreadPool(executorService.scheduleAtFixedRate(new
Runnable() {
@Override
public void run() {
Runtime.getRuntime().exec("cmd /c call C:\\creinvoice\\XMLGen\\runxmlgen.bat");
}
},
15,
240,
TimeUnit.SECONDS);
// .bat просто вызывает java -jar myapp.jar
, и это тот, который должен запускаться только один экземпляр за раз.каждый раз, когда запускается этот runnable, он вызывает bat, и JVM создает новый экземпляр.
Я пытался создать экземпляр Process вне исполнителя и сделать что-то подобное
Process xmlGeneration = null;
Runnable() {
@Override
public void run() {
if (xmlGeneration.stillAlive()){xmlGeneration.Destroy();}
xmlGeneration= Runtime.getRuntime().exec("cmd /c call C:\\creinvoice\\XMLGen\\runxmlgen.bat");
}
}
но кажется, что вы можете вносить только конечные переменные в runnable, так что это невозможно.Конечно, я пытался изучить все, что мог об этом, но если вы хотя бы сможете указать мне правильное направление, куда бы я смотрел, я был бы очень благодарен!