एक ही काम लिखें। इसे नियमित रूप से निष्पादित करें।
प्रभावी रूप से, आप कुछ इस तरह के काम कर रहे होंगे:
SELECT count(*) FROM table WHERE new = 1;
(या जो भी हो)
अपनी गतिविधि के आधार पर हर सेकंड, 5 सेकंड, 10 सेकंड, जो भी उचित लगे, उसे चलाएं।
जब गिनती ==एन, अपनी प्रक्रिया चलाएँ। जब "पिछली बार चलने के बाद का समय" ==5 मिनट, अपनी प्रक्रिया चलाएँ।
प्रक्रिया समान है, आप इसे दो मानदंडों के साथ अधिक बार जांचें।
यह एक लाभ प्रदान करता है कि आपको दुष्ट दौड़ की स्थिति नहीं मिलेगी जहां नौकरी दो बार आग लगती है (क्योंकि नौकरी ए को सम्मिलित गिनती मिली है कि आखिरी नौकरी चलने के 5 मिनट बाद ही ऐसा होता है)। दुर्लभ, हाँ, लेकिन दौड़ की स्थिति हमेशा सक्रिय रूप से "दुर्लभ" घटनाओं की तलाश करती है जो "कभी नहीं होती"।
शेड्यूलिंग के लिए, एक क्रॉस्टैब आसान है क्योंकि आपको अपनी प्रक्रिया को बनाए रखने, इसे जीवित रखने, डिमोनाइज करने आदि की आवश्यकता नहीं है।
यदि आप पहले से ही लंबे समय से चल रहे कंटेनर (ऐप सर्वर, टॉमकैट, आदि) में चल रहे हैं तो वह समस्या पहले ही हल हो चुकी है और आप इसका लाभ उठा सकते हैं।
क्रॉन का नकारात्मक पक्ष इसकी ग्रैन्युलैरिटी है, यह केवल हर मिनट में अधिकतम चलता है। यदि वह बहुत लंबा है, तो यह आपके काम नहीं आएगा। लेकिन अगर यह ठीक है, तो एक साधारण प्रक्रिया होने में वास्तविक मूल्य है जो सिर्फ रोशनी करता है, क्या यह जांच करता है, और छोड़ देता है। बेशक, इसे किसी भी तरह अपनी स्थिति को जारी रखना होगा (उदाहरण के लिए, यह देखने के लिए कि आखिरी नौकरी कब चली थी, यह नौकरी लॉग में देख सकता है)।
जावा के भीतर, बहुत सारे विकल्प हैं:कच्चे धागे, स्लीपिंग, टाइमर, शेड्यूल्ड एक्ज़ीक्यूटर सर्विस, क्वार्ट्ज, ईजेबी टाइमर बीन्स जैसे कुछ (यदि आप जावा ईई कंटेनर चला रहे हैं)।
लेकिन, मैं किस का प्रशंसक हूं। अगर कोई क्रॉन जॉब कर सकता है, तो उसे करने दें और एक बार करें।