मैं एक विरासत जावा/स्प्रिंग/हाइबरनेट परियोजना के भीतर काम कर रहे एक क्रॉन नौकरी पाने की कोशिश कर रहा हूं, इसलिए मैंने वसंत शेड्यूलर का उपयोग करने का फैसला किया।वसंत क्रॉन बनाम सामान्य क्रॉन?
मैं 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 12 की कोशिश की है: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html
इसके अलावा, आप वसंत प्रलेखन उपयोगी हो सकते हैं:
यहाँ आप कुछ अतिरिक्त जानकारी मिल सकती है? * सूर्य # 1'? (अंतिम '*' के बिना) – Tom
हां, मुझे एक अलग त्रुटि संदेश मिला - मैं इसका उल्लेख करता हूं जहां मैं कहता हूं "इसके बावजूद मैंने 7 वें तत्व को खटखटाया" और त्रुटि संदेश सूचीबद्ध किया। :) – Paul
वसंत शेड्यूलर बहुत समृद्ध क्रॉन अभिव्यक्तियों का समर्थन नहीं करता है (सुनिश्चित नहीं है कि यह मामला यहां है), जैसे क्वार्ट्ज शेड्यूलर करता है। इसे क्वार्ट्ज –