2015-03-18 4 views
11

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

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

ответ

4

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

+0

Я пробовал это, и он не работает, я получаю java.lang.IllegalStateException: GenericApplicationContext не поддерживает несколько попыток обновления: просто вызовите 'refresh' один раз. См. Также этот вопрос: http://stackoverflow.com/questions/24720330/reload-or-refresh-a-spring-application-context-inside-a-test-method – yglodt

3

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

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

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

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

Проверить этот ответ о том, как сделать это:

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

Смежные вопросы