Как запустить JAR-файлы весенней загрузки один за другим, используя пакетный файл Windows? - PullRequest
0 голосов
/ 11 мая 2018

Я бы хотел запускать файлы jar пружинной загрузки один за другим, используя пакетный файл Windows.Я создал командный файл, как показано ниже:

start java -jar service1.jar --spring.profiles.active=local
start java -jar service2.jar --spring.profiles.active=local 

Когда я запускал этот пакетный файл, оба jar-файла запускались одновременно.Но сначала мне нужно запустить файл service1.jar, и после его запуска мне нужно запустить файл service2.jar.

Может кто-нибудь помочь мне с этим или каким-либо другим способом?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Очень простым решением было бы запустить первую службу в новом командном процессе (в фоновом режиме) , подождать, например, две секунды, а затем запустить вторую службу также в новом командном процессе (в фоновом режиме)) перед выходом из текущего командного процесса.

@echo off
start "Service 1" /B java.exe -jar service1.jar --spring.profiles.active=local
%SystemRoot%\System32\timeout.exe /T 2 /NOBREAK >nul
start "Service 2" /B java.exe -jar service2.jar --spring.profiles.active=local

Для понимания используемых команд и их работы откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой из них.Команда очень осторожно.

  • echo /?
  • start /?
  • timeout /?
0 голосов
/ 11 мая 2018

Использование запуска в командном файле не ждет процесса - это как запуск нового потока.

Существует другой вызов функции (или запуск / ожидание), но он будет работать, если это не были службы. Проблема в том, что службы должны продолжать работать (вы не можете ждать, пока они завершат запуск /wait).

Таким образом, вам нужно реализовать какое-то условие и проверку в вашем командном файле, который, когда имеет значение true, запускает службу 2. Например, если это веб-служба и есть метод get, который можно использовать для проверки, работает ли он - вызовите этот метод и дождитесь результата, прежде чем запускать второй сервис.

Вы можете сделать что-то вроде:

start java -jar service1.jar --spring.profiles.active=local

:isStarted

set ready=false // Here you implement some logic to check if the service is running

if %ready%=="false" goto isStarted

start java -jar service2.jar --spring.profiles.active=local

Другим решением было бы создать отдельную Java-программу, которая тестирует service1 и завершает работу, когда она запущена и работает. Если мы назовем его «service1test», то ваш файл bat будет:

start java -jar service1.jar --spring.profiles.active=local
service1test   - without using start so it can wait
start java -jar service2.jar --spring.profiles.active=local
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...