2009-11-18 16 views
5

हमें जावा वेब एप्लिकेशन में समय-समय पर एक फ़ंक्शन चलाने की आवश्यकता है। समय-समय पर कुछ वर्ग के फ़ंक्शन को कैसे कॉल करें? क्या कोई तरीका है कि कॉल फ़ंक्शन जब कुछ ईवेंट सर्वर में उच्च लोड की तरह होता है और इसी तरह। क्रोंटैब क्या है? क्या वह समय-समय पर काम करता है?जावा में समय-समय पर कॉल फ़ंक्शन

उत्तर

10

समय-समय पर कुछ फोन करने के लिए, TimerTask

5

देखते हैं कि आप और अधिक मजबूत कुछ की जरूरत है आप उपयोग कर सकते Quartz

crontab के रूप में यूनिक्स मशीनों पर शेड्यूलिंग उपकरण है।

+0

टाइमरटास्क से अधिक मजबूत? यह सिर्फ अधिक लचीला है। – BalusC

+0

@ बालससी: क्वार्ट्ज के साथ मजबूत होगा, आप विभिन्न प्रकार की वस्तुओं को शेड्यूल कर सकते हैं, आप जेटीए लेनदेन, क्लस्टरिंग और कई अन्य जावा ईई सुविधाओं का उपयोग कर सकते हैं। – OscarRyz

+0

@ ब्रायन। खैर हाँ, यह तब मजबूती की आपकी अवधारणा पर निर्भर करता है। क्वार्ट्ज की अतिरिक्त सुविधाओं में से एक सिस्टम पुनरारंभ के बीच दृढ़ता है। यह अकेला भविष्य है, हां, लेकिन यह एक ऐसा भविष्य है जो पुस्तकालय में मजबूती को जोड़ता है, कम से कम मेरे दृष्टिकोण में। – OscarRyz

2

यदि आप समय-समय पर कुछ चलाना चाहते हैं, तो वेबसर्वर में ऐसा न करें। यह आईएमओ का एक बहुत ही गलत दृष्टिकोण होगा। यदि आप यूनिक्स जैसी ऑपरेटिंग सिस्टम पर हैं, तो इसके बजाय cron का उपयोग करना बेहतर है। विंडोज सर्वर समान कार्यक्षमता प्रदान करते हैं।

+0

जावा वेब ऐप एक जेईई ऐप सर्वर में अच्छी तरह से चल सकता है। यदि जेईई में कार्यान्वित व्यावसायिक तर्क का आवंटन करने वाली आवधिक कार्रवाई तब जेईई टाइमर विफलताओं का उपयोग पूरी तरह से उचित और पूरी तरह से समर्थित है। – djna

+0

शायद आप विस्तृत कर सकते हैं कि यह क्रॉन जैसे कुछ का उपयोग कर वेबसर्वर बनाम रखने के लिए एक बुरा तरीका क्यों है? – chrisbunney

+0

djna: सहमत हैं। अधिक जानकारी जरूरी है। –

4

सर्वर के उच्च लोड होने पर विधियों को कॉल करने के लिए, आपके पास कम से कम दो संभावित दृष्टिकोण हैं। आपके ऐप सर्वर में प्रबंधन हुक हो सकते हैं जो आप इसके व्यवहार की निगरानी करने और प्रोग्रामामैटिक कार्रवाई करने की अनुमति देंगे। वैकल्पिक रूप से आपके पास कुछ सिस्टम निगरानी क्षमता (जैसे टिवोली या ओपन व्यू) है और यह "घटनाओं" उत्पन्न करती है, ऐसे घटनाओं को वितरित करना बहुत कठिन नहीं होना चाहिए (उदाहरण के लिए) जेएमएस संदेश और आपका सर्वर उन्हें उठाएं।

हालांकि, आप जो कुछ हासिल करना चाहते हैं उसके बारे में कुछ और समझाना चाहेंगे। अनुकूली आवेदन beahviour सही पाने के लिए काफी मुश्किल हो सकता है।

1

समय-समय पर कुछ कक्षाओं के फ़ंक्शन को कैसे कॉल करें?

कई समाधान कर रहे हैं: एक Timer, cron4j, Quartz, या यहाँ तक EJB Timer API की तरह एक जावा क्रॉन कार्यान्वयन। एक या दूसरे का चयन करना संदर्भ पर निर्भर करता है: आवेदन का प्रकार, उपयोग की जाने वाली तकनीकों, नौकरियों की संख्या इत्यादि।

क्या कोई ऐसा तरीका है जब कुछ घटना सर्वर में उच्च लोड की तरह होती है और कॉल फ़ंक्शन तो

आप शायद अपनी नौकरियों में जेएमएक्स का उपयोग सूचनाओं तक पहुंचने और निगरानी करने और कुछ विशिष्ट स्थिति के तहत कार्रवाई को ट्रिगर करने के लिए कर सकते हैं। लेकिन यह एक पुल मोड है, घटना आधारित नहीं है।

2

हम जावा वेब अनुप्रयोग में समय-समय पर एक समारोह चलाने

(1) तो अपने तैनाती वर्णनकर्ता (web.xml) स्टार्टअप समय में प्रारंभ करेंगे करने के लिए एक श्रोता को परिभाषित में देखने की जरूरत है।

समय-समय पर कुछ कक्षा के फ़ंक्शन को कैसे कॉल करें?

(2) श्रोता में Timer बनाएं।

वहाँ किसी भी तरह से समारोह फोन है कि जब किसी घटना

पर सर्वर में उच्च लोड की तरह हो गई है और इसलिए है

(3) और सिस्टम की स्थिति है कि जावा के साथ नहीं पहुंच रहे हैं के लिए जाँच करने के लिए कुछ धागे चलाने , यहां तक ​​कि सिस्टम प्रोग्राम (अपटाइम, आदि) चलाएं और आउटपुट पार्स करें।

क्रॉन्टाब एक तरीका हो सकता है लेकिन जावा का निष्पादन एक और जेवीएम शुरू करेगा और यह वास्तव में सर्वलेट कंटेनर में गर्म चीज़ है: सभी एक ही JVM में चलता है।

2

java.util.concurrent के बारे में मत भूलना - इसमें शेड्यूलिंग के लिए बहुत सी कक्षाएं हैं, उदा। अनुसूचित थ्रेडपूल एक्स्सेलर, यदि आपको एक साधारण टाइमर से अधिक की आवश्यकता है।

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

वहाँ भी जावा 1.4 करने के लिए इसे का बैकपोर्ट है: http://backport-jsr166.sourceforge.net

2

यदि आप पहले से ही वसंत का उपयोग करते हैं, तो आप स्प्रिंग के कार्य निष्पादन ढांचे पर एक नज़र डालना चाहते हैं - @Scheduled और @Async का उपयोग करके कार्यों के रूप में एनोटेटिंग विधियों के लिए और एक प्रोसेसर में कार्यक्षमता को कार्यान्वित करने के लिए जो एक कार्यकर्ता को वास्तविक कार्य का प्रतिनिधित्व करता है, में वर्णित हैं:

http://blog.springsource.com/2010/01/05/task-scheduling-simplifications-in-spring-3-0/

लाभ यह है कि आप अपने वसंत संदर्भ में एक क्रॉन की तरह सिंटैक्स का उपयोग टाइमर परिभाषित कर सकते हैं और आप कुछ भी कार्य स्थापित करने के लिए विशेष की जरूरत नहीं है, यह भी अच्छी तरह से में एकीकृत है है जावा ईई अनुप्रयोगों और वेब सर्वरों के साथ अच्छी तरह से खेलना चाहिए (जो कस्टम थ्रेड हमेशा नहीं करते हैं)।

संबंधित मुद्दे