मैं अपने डीबी दो ऑफसेट में और अधिक लचीलापन और बेहतर दुकान में configurability के लिए सुझाव है: repeatOffset जो आप कितनी देर तक काम फिर से प्रयास किया जाना चाहिए और trialPeriodOffset रखेंगे जिसके बाद बता देंगे समय खिड़की की जानकारी कि नौकरी को पुनर्निर्धारित करने की अनुमति है।
String repeatOffset = yourDBUtilsDao.getConfigParameter(..);
String trialPeriodOffset = yourDBUtilsDao.getConfigParameter(..);
फिर काम के बजाय काउंटर यह initalAttempt याद करने की आवश्यकता होगी याद करने के लिए:
Long initialAttempt = null;
initialAttempt = (Long) existingJobDetail.getJobDataMap().get("firstAttempt");
और प्रदर्शन तो फिर तुम जैसे ये दो पैरामीटर प्राप्त कर सकते हैं (मैं आप वसंत का उपयोग कर रहे मान) निम्नलिखित की जांच की तरह कुछ:
long allowedThreshold = initialAttempt + Long.parseLong(trialPeriodOffset);
if (System.currentTimeMillis() > allowedThreshold) {
//We've tried enough, time to give up
log.warn("The job is not going to be rescheduled since it has reached its trial period threshold");
sched.deleteJob(jobName, jobGroup);
return YourResultEnumHere.HAS_REACHED_THE_RESCHEDULING_LIMIT;
}
यह एक अच्छा विचार प्रयास का परिणाम है कि अपनेके मूल कार्यप्रवाह करने के लिए वापस लौटाए जाने के लिए एक enum बनाने के लिए किया जाएगाउपरोक्त की तरह आवेदन।
Date startTime = null;
startTime = new Date(System.currentTimeMillis() + Long.parseLong(repeatOffset));
String triggerName = "Trigger_" + jobName;
String triggerGroup = "Trigger_" + jobGroup;
Trigger retrievedTrigger = sched.getTrigger(triggerName, triggerGroup);
if (!(retrievedTrigger instanceof SimpleTrigger)) {
log.error("While rescheduling the Quartz Job retrieved was not of SimpleTrigger type as expected");
return YourResultEnumHere.ERROR;
}
((SimpleTrigger) retrievedTrigger).setStartTime(startTime);
sched.rescheduleJob(triggerName, triggerGroup, retrievedTrigger);
return YourResultEnumHere.RESCHEDULED;
धन्यवाद। यह वह है जिसे मैं ढूंढ रहा था। – Averroes
-1, मैं इस दृष्टिकोण की अनुशंसा नहीं करता - यह 10 मिनट के लिए क्वार्ट्ज कार्यकर्ता धागे में से एक को अवरुद्ध करेगा।जाने का सही तरीका मौजूदा क्वार्ट्ज कार्यक्षमता को सुविधाजनक बनाना होगा - इसे किसी भी तरह से 10 मिनट के बाद एक ही नौकरी को दोबारा शुरू करने के लिए कहें - आखिरकार, यही वह है जो इसके लिए बनाया गया है। अगर हमें कुछ कोड और नींद चलाना है, तो पहले स्थान पर क्वार्ट्ज का उपयोग करने में कोई बात नहीं है। –
अनुपूरक कि क्वार्ट्ज 2.0 (कम से कम .NET के लिए) में। स्टेटफुल जोब को 'PersistJobDataAfterExecutionAttribute' द्वारा प्रतिस्थापित किया गया है http://quartznet.sourceforge.net/apidoc/2.0/html/html/babe3560-218c-38de-031a-7fe1fdd569d2.htm – ossek