2011-06-23 7 views
12

मेरे पास grails में क्वार्ट्ज नौकरी है, जिसे प्रत्येक 5s में निष्पादित करने की आवश्यकता है, लेकिन मुझे इसकी अनुक्रमिक आवश्यकता है। कुछ स्थितियों में नौकरी का निष्पादन इस 5 एस से अधिक है, इस मामले में मैं निष्पादित नहीं करना चाहता हूं जबकि प्रीविउस एक्सप्ल्यूशन समाप्त नहीं हुआ है। इसे grails में कैसे कॉन्फ़िगर करें?Grails में नौकरी के समवर्ती निष्पादन को कैसे रोकें?

(बेशक पूरे जादू एक स्थिर अस्थिर ध्वज के साथ किया जा सकता है, लेकिन यह करने के लिए एक बहुत ही सुंदर तरीका नहीं है) (इसके अलावा मैं कैसे इस काम के लिए कॉन्फ़िगर कर सकते हैं सिंगलटन होने के लिए?)

THX

उत्तर

21

यह मानते हुए कि आप grails क्वार्ट्ज प्लगइन उपयोग कर रहे हैं, तो आप सिर्फ अपने काम में जोड़ने के लिए सक्षम होना चाहिए:

def concurrent = false 

Quartz Plugin Documentation से:

"डिफ़ॉल्ट नौकरियां द्वारा समवर्ती फैशन में क्रियान्वित कर रहे हैं, इसलिए नए नौकरी निष्पादन भले ही एक ही नौकरी के पिछले निष्पादन अभी भी चल रहा है शुरू कर सकते हैं। आप इस मामले में, इस व्यवहार आप उपयोग कर सकते हैं 'समवर्ती' संपत्ति ओवरराइड करने के लिए चाहते हैं क्वार्ट्ज के StatefulJob "का इस्तेमाल किया जाएगा

+1

हाँ, यह समाधान है। हालांकि मुझे लगता है कि यह कार्यों में निरंतर संचय को रोकता नहीं है कतार ... – csviri

+1

तो आउटऑफमेमरी के अवसर तक कार्य कतार बढ़ने से कैसे रोकें? – csviri

+0

अक्सर आप कार्य को कतारबद्ध करना चाहते हैं, जब कार्य "गिनती" या "चरण-दर-चरण" प्रकार का कार्य होता है तो एक लंबा कार्य दूसरों को निष्पादित करने से नहीं रोकना चाहिए। यदि यह वास्तव में एक समस्या है, तो क्वार्ट्ज शायद वह नहीं है जो आप चाहते हैं, जो आप चाहते हैं वह एक थ्रेड है जो लगातार लूप में चलता है। यदि आपको इसे सीमित करने की आवश्यकता है तो आप देरी के लिए Thread.sleep (शेष समय) डाल सकते हैं। –

2

अपनी नौकरी वर्ग implement StatefulJob instead of Job

+1

यह ठीक है लेकिन ये समाधान Grails enviroment में काम नहीं करते हैं। – csviri

+0

मेरा मतलब है कि मैं इसे कॉन्फ़िगर करने में सक्षम नहीं था। – csviri

-1

पर और मैं क्वार्ट्ज बिना इसे लागू किया, वसंत कार्यों का उपयोग कर:

beans = { 
    xmlns task: "http://www.springframework.org/schema/task" 

    task.'scheduler'('id':"myScheduler", 'pool-size':"1") 

    task.'scheduled-tasks'('scheduler':"myScheduler") { 
     task.'scheduled'(ref:"myBean", method:"myBeanMethodToExec", 'fixed-delay':5000) 
    } 
} 

(पूल आकार 1 मुझे लगता है कि यह भी आवश्यक नहीं है, लेकिन 100% सुनिश्चित करने के लिए;))

+1

आपने एक प्रश्न पूछा तो फिर एक उत्तर का चयन किया जिसने प्रश्न को संबोधित नहीं किया। आपके द्वारा पूछे जाने वाले प्रश्नों के बावजूद, आपके द्वारा पूछे गए प्रश्न को संबोधित करने के लिए यह सबसे अच्छा जवाब नहीं है। –

+0

हां आप सही हैं, हालांकि मैंने लिखा है कि "वह कार्य को लगातार कतार में लगातार संचय नहीं रोकता है" - मेरे मन में यह दृष्टिकोण था, जो वास्तव में इस वसंत शेड्यूलर के साथ हल हो गया है। लेकिन आप सही हैं कि मेरे प्रश्न पर एक अच्छा जवाब है। – csviri