जब एक जेवीएम-रन (वास्तव में स्कैला में लिखा गया था, लेकिन मुझे विश्वास है कि समाधान ग्रोवी, क्लोजर या शुद्ध जावा के लिए काफी समान होगा) मेरा कंसोल प्रोग्राम Ctrl दबाकर उपयोगकर्ता द्वारा समाप्त हो जाता है + सी (या सिस्टम शट-डाउन अनुक्रम द्वारा, मुझे नहीं पता कि किसी प्रोग्राम के लिए कोई अंतर है या नहीं), मैं यह सुनिश्चित कैसे कर सकता हूं कि बाहरी संसाधनों को एप्लिकेशन संशोधित करता है (डेटाबेस, फ़ाइलें, वेब सेवा सारित संसाधन) एक अनुमानित, गैर-तर्कसंगत भ्रष्ट राज्य में छोड़े गए हैं?जेवी कंसोल अनुप्रयोगों में^सी से कैसे निपटें?
उत्तर
Runtime.addShutdownHook पर एक नज़र डालें।
आप आमतौर पर यह के रूप में तो प्रयोग करेंगे:
Runtime.addShutdownHook(new Thread() {
public void run() {
// do your clean up here.
}
});
आप इस सिग्नल को फंस सकते हैं और संसाधन बंद कर सकते हैं। ज्यादातर सेवाओं को बंद करने की आवश्यकता नहीं होती है, हालांकि आमतौर पर आपके द्वारा लिखी जाने वाली फाइलें होती हैं।
यह संभव है कि आपको शटडाउन हुक जोड़ना संभव हो। लेकिन मैं आपकी स्थिति के लिए इसका परीक्षण करूंगा।
आप लेकिन एक बंद हुक को लागू करने के रूप में दूसरों बताया कोशिश कर सकते हैं:
दुर्लभ परिस्थितियों आभासी मशीन को निरस्त कर सकता है, वह है, को बंद करके बिना बंद किए चलना बंद करें। ऐसा तब होता है जब वर्चुअल मशीन को बाहरी रूप से समाप्त कर दिया जाता है, उदाहरण के लिए यूनिक्स पर सिगकिल सिग्नल या माइक्रोसॉफ्ट विंडोज पर टर्मिनेट प्रोसेस कॉल के साथ। वर्चुअल मशीन मूल रूप से खराब हो सकती है, उदाहरण के लिए, आंतरिक डेटा संरचनाओं को दूषित करने या तक पहुंचने का प्रयास करने की कोशिश नहीं कर रहा है। यदि वर्चुअल मशीन बंद हो जाती है तो कोई गारंटी नहीं दी जा सकती है कि कोई शट डाउन हुक चलाया जाएगा या नहीं।
मुझे लगता है कि आपको अपने आवेदन में लेनदेन संबंधी संदर्भ पेश करना होगा। डेटाबेस के लिए जो काफी आसान है, फाइल सिस्टम के लिए आप Apache Commons Transaction
- 1. सर्विसस्टैक: त्रुटियों से कैसे निपटें?
- 2. ताले (जेपीए) से कैसे निपटें?
- 3. PHP में स्ट्रीमिंग डेटा से कैसे निपटें?
- 4. डेटाबेस में समवर्ती अद्यतनों से कैसे निपटें?
- 5. कंसोल अनुप्रयोगों के लिए बोसन बनाम थोर
- 6. वैज्ञानिक कंप्यूटिंग में अंडरफ्लो से कैसे निपटें?
- 7. svn में [email protected] से कैसे निपटें?
- 8. एक्लिप्स सीडीटी + सिगविन से कैसे निपटें?
- 9. हास्केल नाम स्थान से कैसे निपटें?
- 10. राउंडिंग-ऑफ टाइमस्पेन से कैसे निपटें?
- 11. सामान्य अभ्यास इंटीजर ओवरफ्लो से कैसे निपटें?
- 12. रीडायरेक्ट यूआरआई की मनमानी राशि से कैसे निपटें?
- 13. सी # कंसोल अनुप्रयोगों को स्वचालित रूप से बंद होने से कैसे रोकें?
- 14. कंसोल अनुप्रयोगों को डिजाइन करने में वास्तुशिल्प विचार?
- 15. कंसोल से snapshots.img कैसे बनाएं?
- 16. 3 जी नेटवर्क पर purgeIdleCellConnections से कैसे निपटें?
- 17. आईओएस 6 पर असंगत चीनी मानचित्रों से कैसे निपटें?
- 18. आईओएस SQLite में उच्चारण वर्णों से कैसे निपटें?
- 19. python3 में यूआरएल में यूनिकोड स्ट्रिंग से कैसे निपटें?
- 20. Mercurial: एक शाखा से कैसे निपटें जिसमें दो सिर हैं
- 21. सहयोगी संदर्भ में बंडलर अपडेट (Gemfile.lock) से कैसे निपटें?
- 22. पैनल डेटा रिग्रेशन में एनए से कैसे निपटें?
- 23. एक 'मस्तिष्क' तक पहुंचने वाली मल्टीप्ली साइटों से कैसे निपटें?
- 24. ग्रहण टेम्पलेट्स के लिए ऊंट केस से कैसे निपटें?
- 25. जेडीबीसी में वारायस (ओरेकल 9आई) से कैसे निपटें?
- 26. मारे गए सेवा पर DeadObjectException से कैसे निपटें?
- 27. Rails to_json आउटपुट में HTML इकाइयों से कैसे निपटें?
- 28. डी 3 - JSON डेटा संरचनाओं से कैसे निपटें?
- 29. एक सामान्य रैखिक इंटरपोलेटर: डेटटाइम से कैसे निपटें?
- 30. कॉलम नामों में रिक्त स्थान से कैसे निपटें?
+1 ब्लैकआउट और सिस्टम क्रैश के खिलाफ प्रोग्राम को सुरक्षित करने का एकमात्र तरीका भी देख सकते हैं। – josefx