#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 я добавляю выходные данные … и сервер запускается успешно. Что?:) Сообщение обновлено. Вывод корректен, не содержит ошибки