एक Grails सेवा वर्ग के लिए आवेदन शट डाउन का पता लगाने के लिए सबसे अच्छा तरीका है?




groovy service (3)

मेरे पास एक Grails सेवा वर्ग है जिसे कुछ सफाई करने की आवश्यकता है जब मेरा टोमैक एप्लिकेशन सर्वर बंद हो जाएगा।

मुझे ग्रेट्स डॉक्स के बारे में सेवा के बारे में कुछ नहीं दिखाई देता है। स्टॉप () या नष्ट () विधि, या किसी भी तरह के आवेदन जीवन चक्र श्रोता को लागू करने का एक तरीका

ऐसा करने का सबसे अच्छा तरीका क्या है?

धन्यवाद!


आपके पास विकल्पों की एक जोड़ी है

अपनी सेवा को लागू करें org.springframework.beans.factory.DisposableBean

class MyService implements org.springframework.beans.factory.DisposableBeam {

    void destroy() throws Exception {

    }
}

या एक एनोटेशन का उपयोग करें

class MyService implements org.springframework.beans.factory.DisposableBeam {

    @PreDestroy
    public void cleanUp() throws Exception {

    }
 }

आईएमओ, एनोटेशन विकल्प बेहतर है, क्योंकि आप अपने नाशक विधि destroy से अधिक अर्थपूर्ण नाम दे सकते हैं और आपकी कक्षाएं सार्वजनिक एपीआई वसंत निर्भरता को बेनकाब नहीं करती है


मैं बूटस्ट्रैप में सेवा को इंजेक्शन लगाने की कोशिश करता हूं और तब विधियों को नष्ट ब्लॉक से बुलाता है, क्योंकि विनाश ब्लॉक निष्पादित होता है जब अनुप्रयोग समाप्त हो जाता है, तो ऐसा कुछ:

class BootStrap {

    def myService

    def init = {servletContext ->
    }

    def destroy = {
       myService.cleanUp()
    }
}

grails-app/conf/BootStrap.groovy का उपयोग तब किया जा सकता है जब ऐप शुरू होता है और बंद हो जाता है

def init = {
  println 'Hello World!'
}

def destroy = {
  println 'Goodnight World!'
}

नोट: कुछ ओएस के CTL+C पर डेवलपमेंट मोड grails run-app का इस्तेमाल करते समय जीवाश्म को स्वच्छ बंद करने के मौके के बिना मार डालेगा और नष्ट समापन को फोन नहीं किया जा सकता है इसके अलावा, अगर आपके जेवीएम को kill -9 हो जाता है तो बंद भी नहीं चलता।