Программно перезапустить Spring Загрузочное приложение

Я использую Spring Boot, и у меня есть прецедент, когда пользователь может загрузить файл, который должен вызвать перезапуск приложения (поскольку загрузка пользователя используется при создании нескольких beans). Я знаю, что я могу избежать перезапуска приложения, но на данный момент - это то, что я хочу.

Я нашел RestartEndpoint в проекте Spring -Cloud, но похоже, что ApplicationPreparedEvent уволен. Есть ли другой способ, с помощью которого я могу программно перезапустить Spring приложение для загрузки?

Ответ 1

Самый простой способ сделать это, вызвав refresh() метод в Spring ApplicationContext. Это убьет и перезагрузит все ваши beans, поэтому вы должны быть уверены, что это происходит только тогда, когда это безопасно для вашего приложения.

Ответ 2

У меня есть специальный случай, когда мое приложение Spring Boot, работающее на Linux, должно выполняться как root.

Поскольку я запускаю приложение как службу systemd, я могу перезапустить его следующим образом:

Runtime.getRuntime().exec(new String[] { "/bin/systemctl", "restart", "foo" });

Если ваше приложение (надеюсь) не требуется для запуска в качестве root, можно использовать setuid wrapper- script или лучше использовать sudo.

Отметьте этот ответ о том, как это сделать:

https://superuser.com/questions/440363/can-i-make-a-script-always-execute-as-root