Почему ProcessBuilder не запускает скрипт сразу?

227
03 февраля 2019, 23:10

Есть небольшой планировщик который должен запускать 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();
        }
    }
}
READ ALSO
Как правильно связать два и более контейнеров docker

Как правильно связать два и более контейнеров docker

буду признателен за ответЦель развернуть два контейнера с базой и приложением и заставить приложение соединятся к бд

232
Парсинг с сайта, поясните

Парсинг с сайта, поясните

Меня интересует такой вопросКогда я делаю парсинг страницы ВК, бот выдает мне информацию на специфическом языке, на котором у меня локализован...

287
Проверка цепочки x509 сертификатов

Проверка цепочки x509 сертификатов

Вопрос такой: У меня есть сертификат корневого УЦ (самоподписанный), промежуточный и ключ ЭЦП (PKCS12)Я из PKCS12 файла достаю сертификат, и теперь...

312
Что делает это участок кода? [закрыт]

Что делает это участок кода? [закрыт]

Считает и записывает в поле класса count количество добавленных элементов в HashSet, а больше и ничегоВсе остальное делает отцовский класс HashSet...

217