हर दिन 1: 01: am के लिए स्प्रिंग क्रोन अभिव्यक्ति


202

मैं एक स्प्रिंग शेड्रॉन अभिव्यक्ति के आधार पर एक निश्चित समय पर अपना कोड निष्पादित करने की कोशिश कर रहा हूं। मैं हर दिन 1: 01: am पर कोड निष्पादित करना चाहूंगा। मैंने निम्नलिखित अभिव्यक्ति की कोशिश की, लेकिन यह मेरे लिए आग नहीं थी। यहाँ वाक्य रचना में क्या गलत है?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}



मेरी क्रोन अभिव्यक्ति 0 0 0 1 JAN MON पिछले साल तक काम कर रहा था। 1 जनवरी को आगे चलकर अमान्य क्रॉन एक्सप्रेशन कहते हुए काम करना बंद करें। हालाँकि यह बहुत कम आवृत्ति के लिए था, लेकिन हम tc सर्वर को चलाने में सक्षम थे। 1 जनवरी के बाद यह नहीं किया। जब मैं 0 0 7 में बदल गया? * सूर्य ने काम करना शुरू कर दिया। मुझे यह जानने की उत्सुकता है कि क्यों 0 0 0 1 JAN MON ने काम करना बंद कर दिया है जहाँ पिछले साल जन में अच्छा था।
स्पैन्डे

0 0 0 1 JAN MON गलत एक्सप्रेशन हो सकता है, अच्छी तरह से यह भी काम कर रहा था और tc सर्वर कभी भी शिकायत नहीं करता है
स्पैन्डे

जवाबों:


573

इसके साथ प्रयास करें:

@Scheduled(cron = "0 1 1 * * ?")

नीचे आप स्प्रिंग फोरम से उदाहरण पैटर्न पा सकते हैं:

* "0 0 * * * *" = the top of every hour of every day.
* "*/10 * * * * *" = every ten seconds.
* "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
* "0 0 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
* "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
* "0 0 0 25 12 ?" = every Christmas Day at midnight

क्रोन अभिव्यक्ति को छह क्षेत्रों द्वारा दर्शाया गया है:

second, minute, hour, day of month, month, day(s) of week

(*) किसी भी मैच का मतलब है

*/X का अर्थ है "हर एक्स"

?("कोई विशिष्ट मूल्य नहीं") - उपयोगी है जब आपको दो क्षेत्रों में से किसी एक में कुछ निर्दिष्ट करने की आवश्यकता होती है जिसमें चरित्र की अनुमति होती है, लेकिन दूसरे की नहीं। उदाहरण के लिए, यदि मैं चाहता हूं कि महीने के किसी विशेष दिन (10 वें दिन) को मेरा ट्रिगर जल जाए, लेकिन मुझे परवाह नहीं है कि सप्ताह का कौन सा दिन होता है, मैं दिन में "10" रखूंगा- महीने के क्षेत्र और "?" सप्ताह के क्षेत्र में दिन।

पुनश्च: इसे काम करने के लिए, अपने एप्लिकेशन संदर्भ में इसे सक्षम करने के लिए याद रखें: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling/#scheduling- एनोटेशन समर्थन


15
- प्रारूप भी वसंत यहाँ अपने आप में प्रलेखित है docs.spring.io/spring/docs/3.0.x/api/org/springframework/...
chrismarx

1
मुझे लगता है कि स्प्रिंग क्रोन सेकंड प्रावधान भी प्रदान करने में सक्षम है, लेकिन सामान्य यूनिक्स क्रोन मिनट आधारित है ... जैसा कि यूनिक्स मैन पेज मिनट में समय की सबसे छोटी इकाई है जिसे कॉन्फ़िगर किया जा सकता है।
नैनोसॉफ्ट

8
"का महत्व क्या है?" चरित्र? क्या यह केवल "सप्ताह के दिन" पर लागू होता है? अगर हम 'की जगह लेते तो क्या यह काम / कुछ अलग करता? क्रिसमस दिवस उदाहरण में '*' के साथ?
लिखिए

1
@encrest यहाँ एक नज़र डालें: stackoverflow.com/questions/11499740/…
gipinani

1
<पर अच्छा ट्यूटोरियल quartz-scheduler.org/documentation/quartz-2.x/tutorials/... >
ट्रे Jonn

90

मेरे अनुसूचक के लिए, मैं इसे हर दिन सुबह 6 बजे आग लगाने के लिए उपयोग कर रहा हूं और मेरी क्रोन संकेतन है:

0 0 6 * * *

यदि आप 1: 01: चाहते हैं, तो इसे सेट करें

0 1 1 * * *

शेड्यूलर के लिए पूरा कोड

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** बहुत महत्वपूर्ण है

अपने अनुसूचक के फायरिंग समय की शुद्धता के बारे में सुनिश्चित करने के लिए, आपको इस तरह से ज़ोन मूल्य निर्धारित करना होगा (मैं इस्तांबुल में हूँ):

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

आप यहां से पूरा समय क्षेत्र मान प्राप्त कर सकते हैं

नोट: मेरा स्प्रिंग फ्रेमवर्क संस्करण है: 4.0.7.RELEASE


1
मुझे नहीं पता कि आपके उत्तर में केवल 12 ही क्यों है, यहां तक ​​कि यह एकमात्र सही उत्तर है!

2
बहुत बहुत धन्यवाद @MoayadAbuJaber यदि डेवलपर मेरे उत्तरों के साथ अपने मुद्दों को ठीक करने में सक्षम हैं, तो स्कोर महत्वपूर्ण नहीं है, यह काफी है।
बहादर तसदीम

क्या मैं xml config sheduler के साथ ज़ोन का उपयोग कर सकता हूँ <task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/>??
शरीफ

3
उल्लेख के समय क्षेत्र के लिए अंगूठे
Forhad

2
धन्यवाद, @ फरहाद यदि आप एक डेवलपर हैं और तारीखों और समय से संबंधित किसी भी मुद्दे से निपट रहे हैं, तो आपको टाइमस्टैम्प, टाइम ज़ोन और रूपांतरणों का विवरण जानना होगा। अन्यथा, आपका डेटा बकवास होगा
बहादुर तस्दीमिर

22

आप अपनी विधि के साथ एनोटेट का उपयोग कर सकते हैं @Scheduled(cron ="0 1 1 * * ?")

0 - सेकंड के लिए है

1 मिनट

दिन का 1 - घंटा।


12

गिपिनानी के जवाब से कुछ गायब है

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

यह 1.01 और 13.01 पर अमल करेगा। इसका उपयोग तब किया जा सकता है जब आपको दिन में कई बार पैटर्न के बिना काम चलाने की आवश्यकता होती है।

और ज़ोन विशेषता बहुत उपयोगी है, जब आप दूरस्थ सर्वर में तैनाती करते हैं। इसे वसंत 4 के साथ पेश किया गया था।


2
ध्यान दें कि संक्षिप्तीकरण (समय क्षेत्र के लिए) JDK 1.1.x संगतता के लिए है और केवल पूर्ण नामों का उपयोग किया जाना चाहिए - javadoc के अनुसार
स्लैश्रॉन

6

एक बात मैंने देखी है: वसंत क्रोनट्रिगर क्रोन नहीं है। आप एक वैध क्रोन एक्सप्रेशन में 7 मापदंडों के साथ समाप्त हो सकते हैं (जो कि आप cronmaker.com पर मान्य कर सकते हैं) और फिर वसंत इसे स्वीकार करते हैं। ज्यादातर मामलों में आप बस पिछले पैरामीटर को हटाते हैं और सब कुछ ठीक काम करता है।


1
"क्रोनट्राइगर क्वार्ट्ज नहीं है"
सैंडी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.