क्या स्प्रिंग सेवा विधि को केवल एक बार निर्दिष्ट समय पर ही शेड्यूल करना संभव है? उदाहरण के लिए, वर्तमान समय 2 बजे है लेकिन जब मैं एक्शन बटन दबाता हूं तो मैं चाहता हूं कि मेरी सेवा विधि 8 बजे शुरू हो। मैं @ शेड्यूल्ड एनोटेशन से परिचित हूं और मुझे यकीन नहीं है कि क्रॉन अभिव्यक्ति को समय-समय पर चलाने के लिए कैसे लिखना है। यह एक @Scheduled(cron = "0 0 20 * * ?")
हर दिन 8 बजे आग लगती है।
कोई सुझाव?स्प्रिंग शेड्यूलिंग कार्य - केवल एक बार चलाएं
उत्तर
आप स्प्रिंग के टास्कशेड्यूलर के कार्यान्वयन में से एक का उपयोग कर सकते हैं। मैंने नीचे एक उदाहरण प्रदान किया है जिसके लिए बहुत अधिक विन्यास की आवश्यकता नहीं है (ConcurrentTaskScheduler जो एकल-थ्रेडेड निर्धारित निष्पादक को लपेटता है)।
सरलतम विधि अनुसूची कि एक Runnable और दिनांक केवल लेता नामित एक है। इससे कार्य निर्दिष्ट समय के बाद एक बार चलाएगा। अन्य सभी विधियां बार-बार चलाने के लिए कार्यों को शेड्यूल करने में सक्षम हैं।
private TaskScheduler scheduler; Runnable exampleRunnable = new Runnable(){ @Override public void run() { System.out.println("Works"); } }; @Async public void executeTaskT() { ScheduledExecutorService localExecutor = Executors.newSingleThreadScheduledExecutor(); scheduler = new ConcurrentTaskScheduler(localExecutor); scheduler.schedule(exampleRunnable, new Date(1432152000000L));//today at 8 pm UTC - replace it with any timestamp in miliseconds to text } ... executeTaskT() //call it somewhere after the spring application has been configured
नोट:
@EnableScheduling जोड़ने @Scheduled और @Async एनोटेशन के लिए समर्थन सक्षम और करने के लिए
के बारे में अधिक task execution & scheduling
सरल काम कर उदाहरण पढ़ें @EnableAsync आपके @ कॉन्फ़िगरेशनमें से एक के लिएकक्षाएं
अद्यतन - निर्धारित कार्य
TaskScheduler के समय विधि एक ScheduledFuture जो एक देरी परिणाम पैदा करने वाली क्रिया रद्द किया जा सकता है रिटर्न रद्द।
तो इसे रद्द करने के लिए, आपको शेड्यूल किए गए कार्य को संभालने की आवश्यकता है (यानी अनुसूचित भविष्य वापसी वस्तु रखें)। कोड को
परिवर्तन कार्य को रद्द करने के लिए ऊपर:
अपने executeTaskT विधि बाहर ScheduledFuture घोषित।
private ScheduledFuture scheduledFuture;
जैसे वापसी वस्तु रखने के लिए शेड्यूल करने के लिए अपने कॉल संशोधित करें:
scheduledFuture = scheduler.schedule(exampleRunnable, new Date(1432152000000L));
कॉल नहीं करने के लिए अपने कोड
boolean mayInterruptIfRunning = true; scheduledFuture.cancel(mayInterruptIfRunning);
यह काम करता है। मैंने सर्वर थ्रेड प्रबंधन कार्य निष्पादक के साथ ConcurrentTaskScheduler त्वरण का विस्तार किया, जैसे कि 'शेड्यूलर = नया समवर्ती टास्कशेड्यूलर (workManagerTaskExecutor, Executors.newSingleThreadScheduledExecutor()) '। यह 'org.springframework.scheduling.commonj.WorkManagerTaskExecutor' का एक प्रकार है और सर्वर जेएनडीआई रजिस्टर द्वारा प्रदान किया जाता है। – shx
ग्रेट, मेरे लिए काम किया। बीटीडब्ल्यू, यदि पैरामीटर के साथ चलने योग्य है, तो आप एक विधि लिख सकते हैं जो पैरामीटर स्वीकार कर रहा है और रननेबल लौटाता है और फिर पैरामीटर शेड्यूलर.schedule (createRunnable (param1), नई तिथि (1432152000000L) के साथ शेड्यूलर में इस विधि को पास करता है; –
@Async इसे प्राप्त करने के लिए अनिवार्य है? – Angom
में कहीं scheduledFuture वस्तु पर रद्द करने के आदेश में प्रत्येक विधि कॉल पर ScheduledExecutorService
और ConcurrentTaskScheduler
बनाएं, सेवा निर्माण पर TaskScheduler
प्रारंभ करना सुविधाजनक है, उदाहरण के लिए
private final TaskScheduler taskScheduler =
new ConcurrentTaskScheduler(Executors.newScheduledThreadPool(10));
@Async
के रूप में हम सिर्फ विधि से कार्य और बाहर निकलने का समय निर्धारित कोई मतलब नहीं है।
- 1. कुछ कोड बनाना केवल एक बार चलाएं
- 2. कुबर्नेट्स - केवल एक बार नौकरी कैसे चलाएं
- 3. लुआ कार्य शेड्यूलिंग
- 4. केवल एक वेबलॉगिक क्लस्टर नोड पर @ शेड्यूल्ड कार्य चलाएं?
- 5. सी # कार्य शेड्यूलिंग लाइब्रेरी
- 6. स्प्रिंग शेड्यूलिंग: @ शेड्यूल्ड बनाम क्वार्ट्ज
- 7. स्प्रिंग कार्य नेमस्पेस
- 8. केवल एक बिल्ड कार्य चलाएं जब गिट रिपॉजिटरी
- 9. उत्तर: एक असफल कार्य चलाएं
- 10. लिनक्स में शेड्यूलिंग: कंप्यूटर निष्क्रिय होने पर एक कार्य चलाएं (= कोई उपयोगकर्ता इनपुट नहीं)
- 11. केवल एक उत्तरदायी कार्य चलाएं जब होस्टनाम में स्ट्रिंग
- 12. प्रति पेज लोड केवल एक बार Greasemonkey स्क्रिप्ट चलाएं?
- 13. @Schedule को क्लस्टर्ड वातावरण में केवल एक बार चलाएं
- 14. जटिल निर्भरताओं के साथ कार्य शेड्यूलिंग
- 15. दिन में एक बार चलाएं
- 16. खेलने ढांचा 2.1 - शेड्यूलिंग async कार्य
- 17. एक बार केवल एक बार कॉल करें
- 18. jQuery - केवल एक बार
- 19. ओपनएमपी - केवल एक बार
- 20. जावा केवल एक बार
- 21. एंगुलरजेएस - केवल एक बार
- 22. RecyclerView.onBindViewHolder केवल एक बार
- 23. ValueAnimator केवल एक बार
- 24. एक ऑडियोबफर सॉर्स नोड दो बार चलाएं?
- 25. प्रति मिनट एक बार से अधिक बार क्रोनबॉज कैसे चलाएं?
- 26. एप्लिकेशन का केवल एक उदाहरण कैसे चलाएं
- 27. शेड्यूलिंग प्रोग्राम
- 28. एक परिवर्तनीय कार्य केवल तभी चलाएं जब चर में एक विशिष्ट स्ट्रिंग
- 29. ऑन प्रीव्यूफ्रेम केवल एक बार
- 30. log4net GlobalContext.Properties केवल एक बार
आप क्वार्ट्ज शेड्यूलर का उपयोग कर सकते हैं :) –