Bir yay uygulamasını kapatmanın birçok yolu vardır. Biri ApplicationContext
:
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
Sorunuz uygulamanızı yaparak kapatmak istediğinizi gösteriyor Ctrl+C
, bu genellikle bir komutu sonlandırmak için kullanılır. Bu durumda...
Kullanım endpoints.shutdown.enabled=true
en iyi tarif değildir. Bu, başvurunuzu sonlandırmak için bir son nokta açığa çıkardığınız anlamına gelir. Bu nedenle, kullanım durumunuza ve ortamınıza bağlı olarak, onu güvence altına almanız gerekecek ...
Ctrl+C
senin durumunda çok iyi çalışmalı. Sorununuzun "ve" işaretinden (&) kaynaklandığını varsayıyorum. Daha fazla açıklama:
Bir Spring Application Context, JVM çalışma zamanı ile bir kapatma kancası kaydetmiş olabilir. ApplicationContext belgelerine bakın .
Spring Boot bu kancayı dediğiniz gibi otomatik olarak yapılandırır mı bilmiyorum. Sanırım öyle.
Açık Ctrl+C
, kabuğunuz INT
ön plan uygulamasına bir sinyal gönderir . "Lütfen infazınızı yarıda kesin" anlamına gelir. Uygulama bu sinyali yakalayabilir ve sonlandırılmadan önce temizleme yapabilir (Bahar tarafından kaydedilen kanca) veya basitçe görmezden gelebilir (kötü).
nohup
HUP sinyalini yok saymak için aşağıdaki programı bir tuzakla çalıştıran komuttur. HUP telefonu kapattığınızda programı sonlandırmak için kullanılır (örneğin ssh bağlantınızı kapatın). Ayrıca, programınızın kaybolan bir TTY'yi engellemesini önlemek için çıktıları yeniden yönlendirir. nohup
INT sinyalini ihmal ETMEZ. Yani Ctrl+C
çalışmayı engellemez .
Sorununuzun nohup'tan değil "ve" işaretinden (&) kaynaklandığını varsayıyorum. Ctrl+C
ön plan süreçlerine bir sinyal gönderir. Ve işareti, uygulamanızın arka planda çalışmasına neden olur. Tek çözüm: yapmak
kill -INT pid
Kullanın kill -9
veya kill -KILL
kötüdür çünkü uygulama (burada JVM) onu düzgün bir şekilde sonlandırmak için yakalayamaz.
Diğer bir çözüm de uygulamanızı ön plana çıkarmaktır. Sonra Ctrl+C
çalışacak. Bash Job kontrolüne daha kesin olarak bir göz atın fg
.