2015-06-17 6 views
13

मैं एक विरासत जावा/स्प्रिंग/हाइबरनेट परियोजना के भीतर काम कर रहे एक क्रॉन नौकरी पाने की कोशिश कर रहा हूं, इसलिए मैंने वसंत शेड्यूलर का उपयोग करने का फैसला किया।वसंत क्रॉन बनाम सामान्य क्रॉन?

मैं myTask.doStuff हर महीने के पहले रविवार 12:00 पर चलाना चाहते हैं। 0 0 12:

<task:scheduled-tasks scheduler="MyTaskScheduler"> 
    <task:scheduled ref="myTask" method="doStuff" cron="0 0 12 ? 1/1 SUN#1 *"/> <!-- Every first Sundy of the month --> 
</task:scheduled-tasks> 

<task:scheduler id="MyTaskScheduler" pool-size="10"/> 
समस्या क्रॉन अभिव्यक्ति ही होने के साथ

:

अपने आवेदन-context.xml में मैं तरह मेरे काम अनुसूचक कॉन्फ़िगर कर दिया है? 1/1 रवि # 1 *

और myTask एक सेम है, जो एक विधि doStuff कहा जाता है कि पूरी तरह से काम करता है जब इकाई परीक्षण से चला गया है।

जब मैं बनाने और तैनात मैं वसंत से एक bootime अपवाद:

Caused by: java.lang.IllegalArgumentException: cron expression must consist of 6 fields (found 7 in 0 0 12 ? 1/1 SUN#1 *) 
at org.springframework.scheduling.support.CronSequenceGenerator.parse(CronSequenceGenerator.java:233) 
at org.springframework.scheduling.support.CronSequenceGenerator.<init>(CronSequenceGenerator.java:81) 
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:54) 
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:44) 
at org.springframework.scheduling.config.ScheduledTaskRegistrar.afterPropertiesSet(ScheduledTaskRegistrar.java:129) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) 

यह देखते हुए कि मैं पहली बार के लिए क्रॉन भाव उपयोग कर रहा हूँ, मेरी पहली धारणा थी कि मैं कुछ गलत कर रहा था, लेकिन मैं cronmaker का उपयोग करके दो बार चेक किया गया और यह मुझे एक ही परिणाम दिया।

सभी दस्तावेजों का कहना है: एक क्रॉन अभिव्यक्ति छह या सात subexpressions (क्षेत्र) से मिलकर एक श्रृंखला है। 1

इस मैं 7 वीं तत्व (वर्ष) के बाद से यह उदाहरण में से किसी में नहीं है बंद दस्तक करने की कोशिश की, और एक अलग त्रुटि संदेश मिला के बावजूद:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.scheduling.config.ScheduledTaskRegistrar#0': Invocation of init method failed; nested exception is java.lang.NumberFormatException: For input string: "0#1" 

... समर्थन org.springframework.scheduling करता है सब कुछ से क्रॉन का एक अलग स्वाद? the spring-specific documentation बस 'क्रॉन एक्सप्रेशन' कहता है।

मैं इस क्रॉन अभिव्यक्ति इस संदर्भ में अपेक्षा के अनुरूप काम करने के लिए मिल सकता है? किसी भी मदद के लिए आभारी होंगे।

इस समय मेरा समाधान प्रत्येक अभिव्यक्ति को चलाने के लिए इस अभिव्यक्ति को सरल बनाना होगा, और कुछ जावा तर्क की गणना करने के लिए महीने के कौन से रविवार की गणना करें, और देखें कि क्या यह काम करता है - लेकिन इस तरह के उद्देश्य को हरा देता है विन्यास दृष्टिकोण का और एक antipattern की तरह लगता है।

+0

आप '0 0 12 की कोशिश की है: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

इसके अलावा, आप वसंत प्रलेखन उपयोगी हो सकते हैं:

यहाँ आप कुछ अतिरिक्त जानकारी मिल सकती है? * सूर्य # 1'? (अंतिम '*' के बिना) – Tom

+0

हां, मुझे एक अलग त्रुटि संदेश मिला - मैं इसका उल्लेख करता हूं जहां मैं कहता हूं "इसके बावजूद मैंने 7 वें तत्व को खटखटाया" और त्रुटि संदेश सूचीबद्ध किया। :) – Paul

+0

वसंत शेड्यूलर बहुत समृद्ध क्रॉन अभिव्यक्तियों का समर्थन नहीं करता है (सुनिश्चित नहीं है कि यह मामला यहां है), जैसे क्वार्ट्ज शेड्यूलर करता है। इसे क्वार्ट्ज –

उत्तर

27

वसंत अनुसूचित कार्य क्रॉन अभिव्यक्ति के समान प्रारूप में नहीं हैं।

वे यूनिक्स क्रॉन अभिव्यक्ति के रूप में एक ही प्रारूप का पालन नहीं करते।

केवल 6 फ़ील्ड हैं: दूसरा, मिनट, घंटा, महीने का महीना, महीना, सप्ताह का दिन। एस्टेरिक (*) का मतलब किसी से मेल खाता है। */एक्स का अर्थ है "हर एक्स" (उदाहरण देखें)। सप्ताह के संख्यात्मक दिन मेरे लिए काम नहीं करते हैं। इसके अलावा, "एमओएन-एफआरआई" पढ़ने के लिए बहुत आसान है। यहां कुछ उदाहरण अभिव्यक्तियां दी गई हैं:

"0 0 18 * * एमओएन-एफआरआई" का अर्थ हर सप्ताह के दिन 6:00 बजे होता है।

"0 0 */1 * * *" घंटे पर हर घंटे का मतलब है।

"0 0 */8 * * *" घंटे पर हर 8 घंटे का मतलब है।

"0 0 12 1 * *" का मतलब हर महीने के पहले दिन 12:00 बजे है। http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/scheduling.html