Запустите spring boot из другого приложения

#java #spring-boot #processbuilder

#java #spring-boot #processbuilder

Вопрос:

Я пишу лаунчер (для курсового проекта) для запущенного приложения spring boot. Я запускаю приложение spring boot следующим образом:

  Runnable runServer = () -> {
     try {
          ProcessBuilder pb = new ProcessBuilder("java.exe", "-jar", "server/server.jar");
           pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
           process = pb.start();
           process.waitFor();
           } catch (InterruptedException e) {
                e.printStackTrace();
           } catch (IOException e) {
                e.printStackTrace();
           }
        };
   Thread thread = new Thread(runServer);
   thread.start();
  

Приложение запущено, но не работает:

Диспетчер задач: введите описание изображения здесь

Браузер:

введите описание изображения здесь

Если я запущу приложение в cmd:

 java -jar server.jar
  

Затем все работает корректно, приложение начинает открываться в браузере.
Как запустить приложение spring — boot из другой программы? Спасибо.

Комментарии:

1. В Spring нет ничего специфичного, что могло бы заставить ваше приложение вести себя по-разному в этих двух ситуациях. Проблема, должно быть, как-то связана с различиями в средах, которые настраиваются для запуска приложения. Как говорит @deadpool, возможно, номер порта в двух случаях отличается, и это может быть связано с окружающей средой. Если у вас каким-то образом установлена переменная окружения в вашей среде командной строки, ваш лаунчер может не передавать эту переменную в среду выполнения приложения.

2. …другой пример заключается в том, что я вижу, что CWD будет отличаться в ваших двух примерах. В случае запуска вы будете находиться в каталоге над каталогом сервера , который содержит ваш файл jar. Во втором случае вашим CWD будет сам каталог сервера . Это может изменить, а может и не изменить поведение программы.

3. Помимо того, что вы видите в своем браузере, должен быть вывод из Spring. Я бы посоветовал поискать там выходные данные журнала или исключения, которые могли бы подсказать вам, что происходит не так.

4. Вы должны организовать запись стандартного вывода процесса и стандартной ошибки где-нибудь, чтобы вы могли это видеть. Возможно, процесс выдает сообщение об ошибке, в котором сообщается, почему он не работает. Или может быть заблокирована запись сообщения в stdout или stderr, потому что буфер заполнен.

5. @Steve я добавляю выходные данные … и сервер запускается успешно. Что?:) Сообщение обновлено. Вывод корректен, не содержит ошибки