Ada banyak cara untuk mematikan aplikasi pegas. Salah satunya adalah memanggil close () di ApplicationContext:
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
Pertanyaan Anda menyarankan Anda ingin menutup aplikasi Anda dengan melakukan Ctrl+C, yang sering digunakan untuk menghentikan perintah. Pada kasus ini...
Penggunaan endpoints.shutdown.enabled=truebukanlah resep terbaik. Ini berarti Anda mengekspos titik akhir untuk menghentikan aplikasi Anda. Jadi, tergantung pada kasus penggunaan dan lingkungan Anda, Anda harus mengamankannya ...
Ctrl+Charus bekerja dengan baik dalam kasus Anda. Saya menganggap masalah Anda disebabkan oleh ampersand (&) Penjelasan selengkapnya:
Konteks Aplikasi Musim Semi mungkin telah mendaftarkan hook shutdown dengan runtime JVM. Lihat dokumentasi ApplicationContext .
Saya tidak tahu apakah Spring Boot mengkonfigurasi hook ini secara otomatis seperti yang Anda katakan. Saya berasumsi demikian.
Aktif Ctrl+C, shell Anda mengirimkan INTsinyal ke aplikasi latar depan. Artinya "tolong hentikan eksekusi Anda". Aplikasi dapat menjebak sinyal ini dan melakukan pembersihan sebelum penghentiannya (pengait didaftarkan oleh Spring), atau mengabaikannya (buruk).
nohupadalah perintah yang menjalankan program berikut dengan perangkap untuk mengabaikan sinyal HUP. HUP digunakan untuk menghentikan program ketika Anda menutup telepon (tutup koneksi ssh Anda misalnya). Selain itu, ia mengalihkan keluaran untuk menghindari blok program Anda pada TTY yang menghilang. nohupTIDAK mengabaikan sinyal INT. Jadi TIDAK mencegah Ctrl+Cuntuk bekerja.
Saya berasumsi bahwa masalah Anda disebabkan oleh tanda & (&), bukan oleh nohup. Ctrl+Cmengirimkan sinyal ke proses latar depan. Tanda ampersand menyebabkan aplikasi Anda berjalan di latar belakang. Satu solusi: lakukan
kill -INT pid
Gunakan kill -9atau kill -KILLburuk karena aplikasi (di sini JVM) tidak dapat menjebaknya untuk dihentikan dengan baik.
Solusi lain adalah mengembalikan aplikasi Anda di latar depan. Kemudian Ctrl+Cakan berhasil. Lihat kontrol Bash Job, lebih tepatnya di fg.