में चल रहा है मैं (Quartz1.6 में scheduler.getCurrentlyExecutingJobs का ब्यौरा स्पष्ट करने के लिए) विधि चाहते हैं। मेरे पास एक नौकरी है जिसमें किसी भी क्षण में केवल एक उदाहरण चलाना चाहिए। इसे यूआई से "अभी रन" करने के लिए ट्रिगर किया जा सकता है, लेकिन यदि नौकरी का उदाहरण पहले से ही इस नौकरी के लिए चल रहा है - कुछ भी नहीं होना चाहिए।अगर एक नौकरी Quartz1.6
यह मैं कैसे की जाँच एक नौकरी चल रहा है कि मुझे दिलचस्पी है या नहीं है:
List<JobExecutionContext> currentJobs = scheduler.getCurrentlyExecutingJobs();
for (JobExecutionContext jobCtx: currentJobs){
jobName = jobCtx.getJobDetail().getName();
groupName = jobCtx.getJobDetail().getGroup();
if (jobName.equalsIgnoreCase("job_I_am_looking_for_name") &&
groupName.equalsIgnoreCase("job_group_I_am_looking_for_name")) {
//found it!
logger.warn("the job is already running - do nothing");
}
}
तो, यह परीक्षण करने के लिए, मैं एक इकाई परीक्षण के बाद यह काम एक के दो उदाहरणों का समय निर्धारित करने की कोशिश करता है है । मैं जब दूसरी नौकरी का समय निर्धारित करने की कोशिश कर रहा तथापि, चेतावनी को देखने के लिए उम्मीद कर रहा था, इसके बजाय, मैं इस अपवाद हो रही है:
org.quartz.ObjectAlreadyExistsException: Unable to store Job with name:
'job_I_am_looking_for_name' and group: 'job_group_I_am_looking_for_name',
because one already exists with this identification.
जब मैं एक डिबग मोड में इस इकाई परीक्षण, इस लाइन पर ब्रेक के साथ चलाने :
सूची currentJobs = scheduler.getCurrentlyExecutingJobs();
मैं देख रहा हूँ सूची खाली है - तो अनुसूचक दौड़ने में ये कार्य नहीं करता है, लेकिन यह अभी भी इसे फिर से शेड्यूल करने के लिए विफल रहता है - जो मुझसे कहता है काम वास्तव में समय में चल रहा था ...
क्या मैं इस शेड्यूलर विधि के साथ कुछ बेहतर बिंदु खो रहा हूं?
धन्यवाद! posting on Terracotta's forum
यहाँ फिर से टोपी है: -
मरीना
बस ध्यान दें कि 'getCurrentlyExecutingJobs()' विधि के बारे में पता क्लस्टर नहीं है, तो यह करता है, तो आपके उपयोग एकल नोड क्वार्ट्ज केवल विन्यास काम करेंगे। – Marboni
उपयोगी टिप के लिए धन्यवाद! – Marina