Есть небольшой планировщик который должен запускать java приложения иcпользуя java -jar /.../app.jar через каждую минуту (Запускаемые jar это разные jar'ники и разные приложения их приличный список).
Но проблема в том что скрипты запуска в ProcessBuilder не отрабатываются сразу. Или точнее говоря они вообще не отрабатываются до тех пор пока я не закрою этот стартер. И это совсем не то поведение которое я ожидал.
Я пробовал к вызову .command("java", "-jar", file).start() добавить waitFor(), но это не как не исправляет ситуацию.
Как мне добиться такого поведения чтобы приложения открывалить по цепочке с задержкой в минуту?
Map<String, String> prop = new PropertiesHolder().fetchProperties();
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(10);
AtomicInteger latency = new AtomicInteger(0);
prop.keySet().stream()
.filter(key -> key.contains("channel"))
.forEach(channelKey -> {
latency.set(latency.get() + 60);
String dir = prop.get(channelKey);
Runnable task = taskFactory(dir, "app.jar");
executorService.schedule(task, latency.get(), TimeUnit.SECONDS);
});
private static Runnable taskFactory(final String dir, final String file) {
return () -> new Starter().start(dir, file);
}
public class Starter {
public void start(String dir, String file) {
try {
new ProcessBuilder().directory(new File(dir)).command("java", "-jar", file).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости