2012-03-27 3 views
25

क्या नौकरी को तोड़ना संभव है जो तुरंत ट्रिगर करेगा? जब मैं नौकरी ट्रिगर करना चाहता हूं तो अब मैंने वर्तमान दिनांक और समय के साथ एक क्रॉन अभिव्यक्ति स्ट्रिंग खरीदी - मुझे लगता है कि यह बहुत जटिल है, क्या तुरंत नौकरी को ट्रिगर करने का कोई और तरीका है?जावा क्वार्ट्ज शेड्यूलर तुरंत एक नई नौकरी आग

अग्रिम में धन्यवाद।

उत्तर

23

क्वार्ट्ज Scheduler में पंजीकृत सभी नौकरियों को JobKey द्वारा विशिष्ट रूप से पहचाना जाता है जो एक नाम और समूह से बना है। आप अपने Scheduler उदाहरण के triggerJob(JobKey jobKey) पर कॉल करके तुरंत JobKey दिए गए नौकरी को आग लगा सकते हैं।

//Create a new Job 
JobKey jobKey = JobKey.jobKey("myNewJob", "myJobGroup"); 
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity(jobKey).storeDurably().build(); 

//Register this job to the scheduler 
scheduler.addJob(job, true); 

//Immediately fire the Job MyJob.class 
scheduler.triggerJob(jobKey); 

नोट:

  • scheduler अपने आवेदन भर में इस्तेमाल समयबद्धक उदाहरण है। इसकी start() विधि को इसे बनाए जाने के बाद पहले ही कॉल किया जाना चाहिए।

  • नौकरी टिकाऊ नौकरी है जो किसी भी ट्रिगर या क्रॉन को संलग्न नहीं कर सकती है। इसे triggerJob(JobKey jobKey) पर कॉल करके केवल प्रोग्रामेटिक रूप से निकाल दिया जा सकता है।

+0

क्यों 'SimpleTrigger' का उपयोग नहीं करना और 'scheduler.scheduleJob()' का उपयोग क्यों करें जिसके परिणामस्वरूप तत्काल निष्पादन होगा? – basZero

+1

एफवाईआई जॉबकी 1.5.2 एपीआई का हिस्सा नहीं है। –

+0

नौकरी को टिकाऊ सेट किया जाना चाहिए (.storeDurably()) लेकिन फिर हमें इसे मैन्युअल रूप से साफ़ करना होगा (शायद शेड्यूलर.डिलीटोब() का उपयोग करना) या नौकरी डीबी में लगातार रहती है। मुझे आश्चर्य है कि लोग इस समस्या से कैसे निपटते हैं? – leeyuiwah

46

हाँ, क्रोन अभिव्यक्तियों पर प्रतीक्षा करने के बजाय तुरंत अपने काम को आग लगाने के लिए निम्नलिखित Trigger का उपयोग करें।

String jobName = ""; // Your Job Name 
    String groupName = ""; // Your Job Group 
    Trigger trigger = TriggerBuilder.newTrigger() 
       .withIdentity(jobName, groupName) 
       .startNow() 
       .build(); 
+6

स्मृति रिसाव सेटिंग टिकाऊ = सत्य बनाने से काफी बेहतर;) – BrunoJCM

0

आप 2 कुंजी स्ट्रिंग मानों के साथ फ्लाई पर "जॉबकी" बना सकते हैं।

IScheduler sched = /* however you get your scheduler*/; 

sched.TriggerJob(new JobKey("myname", "mygroup")); 
+0

कृपया कम से कम एक संक्षिप्त विवरण जोड़ें। –