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=true
bukanlah resep terbaik. Ini berarti Anda mengekspos titik akhir untuk menghentikan aplikasi Anda. Jadi, tergantung pada kasus penggunaan dan lingkungan Anda, Anda harus mengamankannya ...
Ctrl+C
harus 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 INT
sinyal 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).
nohup
adalah 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. nohup
TIDAK mengabaikan sinyal INT. Jadi TIDAK mencegah Ctrl+C
untuk bekerja.
Saya berasumsi bahwa masalah Anda disebabkan oleh tanda & (&), bukan oleh nohup. Ctrl+C
mengirimkan sinyal ke proses latar depan. Tanda ampersand menyebabkan aplikasi Anda berjalan di latar belakang. Satu solusi: lakukan
kill -INT pid
Gunakan kill -9
atau kill -KILL
buruk karena aplikasi (di sini JVM) tidak dapat menjebaknya untuk dihentikan dengan baik.
Solusi lain adalah mengembalikan aplikasi Anda di latar depan. Kemudian Ctrl+C
akan berhasil. Lihat kontrol Bash Job, lebih tepatnya di fg
.