2016-04-18 7 views
6

द्वारा स्प्रिंग बूट एप्लिकेशन को गर्वपूर्वक बंद करने के लिए कैसे करें हमारे पास एक बहुप्रचारित स्प्रिंग बूट एप्लिकेशन है, जो लिनक्स मशीन पर डिमन के रूप में चलता है। जब मैं द्वारा आवेदन को रोकने की कोशिश शुरू रोक-डेमॉन इसस्टार्ट-स्टॉप-डिमन

start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME 

SIGTERM संकेत भेज दिया जाता है और आवेदन immetiately समाप्त होता है की तरह। हालांकि मैं चाहता हूं कि एप्लिकेशन प्रतीक्षा करे, जब तक कि प्रत्येक थ्रेड अपने काम को पूरा न करे।

क्या कोई तरीका है, एसआईजीटरएम सिग्नल कब प्राप्त होता है, इसका प्रबंधन करने का तरीका क्या होता है?

+0

आप शान से एम्बेडेड सर्वलेट कंटेनर को बंद करने में रुचि रखते हैं, कृपया देखें [इस वसंत बूट मुद्दा] (https://github.com/spring-projects/spring-boot/issues/4657)। –

उत्तर

13

स्प्रिंग बूट ऐप JVM के साथ शट डाउन हुक पंजीकृत करता है ताकि यह सुनिश्चित किया जा सके कि ApplicationContext बाहर निकलने पर शानदार रूप से बंद हो गया है। बीन (या सेम) बनाएं जो DisposableBean लागू करता है या @PreDestroy एनोटेशन के साथ विधि है। ऐप शटडाउन पर यह बीन लगाया जाएगा।

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-application-exit

+1

टिप के लिए धन्यवाद। हालांकि यह मेरी समस्या का समाधान नहीं करता है, क्योंकि मुझे किसी भी तरह से SIGTERM सिग्नल को अवरुद्ध करने की आवश्यकता है और जब तक एप्लिकेशन इसे पूरा नहीं कर लेता तब तक प्रतीक्षा करें। यह मुझे कुछ सफाई करने की अनुमति देता है, लेकिन अगर मैं इसे सही ढंग से समझता हूं, तो यह मुझे वर्तमान में चल रही विधि को समाप्त करने से रोकने की अनुमति नहीं देता है। – Michal

+0

@ मिचल आप सही हैं, यह आपको समाप्ति को रोकने की अनुमति नहीं देता है। लेकिन यह धागे को रोकने के धागे को लागू करने और धागे खत्म होने तक प्रतीक्षा करने की अनुमति देता है। शटडाउन हुक काम करता है तो JVM को समाप्त नहीं किया जाएगा। – Evgeny

+0

मैं आपको प्लस 2 देना चाहता हूं, लेकिन मैं केवल 1 दे सकता हूं ... –