Їх існує багато способів вимкнути пружинний додаток. Перший - викликати close () на ApplicationContext:
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
Ваше запитання передбачає, що ви хочете закрити свою програму, роблячи це Ctrl+C, що часто використовується для припинення команди. В цьому випадку...
Вживання endpoints.shutdown.enabled=true- не найкращий рецепт. Це означає, що ви виставляєте кінцеву точку, щоб скасувати заявку. Отже, залежно від випадку використання та оточення, вам доведеться захистити його ...
Ctrl+Cмає працювати дуже добре у вашому випадку. Я припускаю, що ваша проблема викликана ampersand (&) Більше пояснення:
У контексті весняних програм може бути зареєстрований гак відключення за час виконання JVM. Дивіться документацію ApplicationContext .
Я не знаю, чи Spring Boot налаштовує цей гачок автоматично, як ви сказали. Я припускаю, що так.
Увімкнено Ctrl+C, ваша оболонка надсилає INTсигнал додатку переднього плану. Це означає "будь ласка, перервіть ваше виконання". Додаток може захопити цей сигнал і зробити очищення до його закінчення (гачок, зареєстрований Spring), або просто проігнорувати його (погано).
nohupце команда, яка виконує наступну програму з пасткою для ігнорування сигналу HUP. HUP використовується для припинення програми під час відключення (закрийте, наприклад, ssh-з'єднання). Більше того, він перенаправляє виходи, щоб уникнути того, що ваша програма блокується на зниклому TTY. nohupНЕ ігнорує сигнал INT. Так що НЕ заважає Ctrl+Cпрацювати.
Я припускаю, що ваша проблема викликана ampersand (&), а не nohup. Ctrl+Cпосилає сигнал процесам переднього плану. "Амперсанд" призводить до запуску програми у фоновому режимі. Одне рішення: робити
kill -INT pid
Використовуйте kill -9або kill -KILLпогано, оскільки додаток (тут JVM) не може захопити його, щоб закінчитися граціозно.
Ще одне рішення - повернути свою програму на перший план. Тоді Ctrl+Cбуде працювати. Погляньте на контроль Bash Job, точніше на fg.