2010-05-13 9 views
9

मेरे पास क्वार्ट्ज नौकरी है जो पहले ही निर्धारित हो चुकी है। मैं इसके साथ जुड़े जॉबडाटा मैप को अपडेट करना चाहता हूं। अगर मुझे JobDataMap jobDataMap = scheduler.getJobDetail(....).getJobDataMap() के साथ जॉबडाटामैप मिलता है, तो क्या वह नक्शा "लाइव" है? अर्थात। अगर मैं इसे बदलता हूं, तो क्या यह शेड्यूलर में जारी रहेगा? यदि नहीं, तो मैं इसे कैसे जारी रखूं?एक मौजूदा जॉबडेटा मैप अपडेट करें

उत्तर

6

http://www.quartz-scheduler.org/docs/tutorial/TutorialLesson03.html देखें:

एक नौकरी उदाहरण रूप में परिभाषित किया जा सकता है "स्टेटफुल" या "गैर स्टेटफुल"। गैर-स्टेटफुल जॉब्स में केवल जॉबडेटा मैप संग्रहीत होता है जब वे शेड्यूलर में जोड़े जाते हैं। इसका अर्थ है कि नौकरी के निष्पादन के दौरान नौकरी डेटा मानचित्र की सामग्री में किए गए कोई भी परिवर्तन खो जाएंगे, और अगली बार निष्पादन के बाद काम नहीं करेगा।

... एक राज्यव्यापी नौकरी सिर्फ विपरीत है - इसका जॉबडाटा मैप नौकरी के हर निष्पादन के बाद फिर से संग्रहीत किया जाता है।

जॉब इंटरफ़ेस के बजाय, आप स्टेटफुल जोब इंटरफ़ेस को कार्यान्वित करके एक नौकरी को राज्य के रूप में चिह्नित करें।

+1

लेकिन अगर मैं निष्पादन के बाहर से नौकरी अद्यतन करना चाहता हूं तो क्या होगा? जैसे जेएमएक्स से? –

12

मुझे एक ही समस्या थी: मेरे पास दूसरा ट्रिगर है जो नौकरी के डेटा मानचित्र में कतार पर काम करता है जो एक राज्यव्यापी नौकरी निकालता है। हर बार नौकरी की आग लगती है, यह कतार से चुनाव करती है और प्रदूषित तत्व पर कुछ काम करती है। प्रत्येक नौकरी निष्पादन के साथ, कतार में एक कम तत्व होता है (कतार नौकरी के भीतर से सही ढंग से अपडेट की जाती है)। जब कतार खाली होती है, तो नौकरी स्वयं को अनदेखा कर देती है।

मैं कतार में अधिक तर्क प्रदान करने के लिए चल रहे नौकरी/ट्रिगर के तर्कों की सूची को बाहरी रूप से अद्यतन करने में सक्षम होना चाहता था। हालांकि, डेटा मैप को पुनः प्राप्त करना और कतार को अपडेट करना पर्याप्त नहीं था (निम्न निष्पादन दिखाता है कि कतार अद्यतन नहीं है)। समस्या यह है कि क्वार्ट्ज केवल निष्पादन के बाद नौकरी के उदाहरण के नौकरी डेटा मानचित्र को अद्यतन करता है।

यहाँ समाधान मैंने पाया है:

JobDetail jobDetail = scheduler.getJobDetail("myJob", "myGroup"); 
jobDetail.getJobDataMap.put("jobQueue", updatedQueue); 
scheduler.addJob(jobDetail, true); 

अंतिम पंक्ति का निर्देश क्वार्ट्ज एक प्रदान कर रहे हैं के साथ संग्रहीत नौकरी बदलने के लिए। अगली बार जब नौकरी निकाल दी जाती है तो यह अद्यतन कतार देखेंगे।

+0

क्वार्ट्ज के नवीनतम संस्करण (2.6.10?) –

+0

क्षमा करें - यह संस्करण 2.1.7 है ... 2.1.6 पहले –

24

क्वार्ट्ज 2.0 में। StatefulJob बहिष्कृत है। नौकरी डेटा मानचित्र को जारी रखने के लिए, नौकरी कक्षा पर @PersistJobDataAfterExecution का उपयोग करें। यह आमतौर पर @DisallowConcurrentExecution के साथ जाता है।

+0

जानकारी के साथ ठीक है Bozho जानकारी के लिए धन्यवाद। –

+0

लेकिन हम किस तालिका में जॉबडेटा मैप जानकारी पा सकते हैं, मैंने सभी टेबलों की जांच की लेकिन मुझे उन्हें नहीं मिला। –

+0

क्या यह QRTZ_JOB_DETAILS तालिका का Job_data कॉलम है? –

संबंधित मुद्दे