2011-03-18 15 views
21

मैं सब्सक्रिप्शन और स्टोर फीड से प्रत्येक 6 घंटों के बाद सदस्यता से डीबी में पुनर्प्राप्त करना चाहता हूं। मैं इस कार्य को पूरा करने के लिए पृष्ठभूमि में टाइमर थ्रेड रखना चाहता हूं।जेएसपी/सर्वलेट वेब अनुप्रयोग में पृष्ठभूमि टाइमर कार्य

सबसे अच्छा तरीका क्या है? एक सामान्य टाइमर धागा या क्वार्ट्ज एपीआई?

उत्तर

40

शुरू करने के लिए, मैं इसके लिए जेएसपी का उपयोग नहीं करता। वहां के लिए नहीं है।

जब आप जावा ईई 5 पर हों, तो इसके लिए कंटेनर-प्रदत्त जॉब्सड्यूलिंग एपीआई का उपयोग करें। अधिक जानकारी उस कंटेनर पर निर्भर करती है जिसका आप उपयोग कर रहे हैं। उदाहरण के लिए जेबॉस एएस 5 बॉक्स के बाहर क्वार्ट्ज के साथ जहाजों। या जब आप जेएसपी/सर्वलेट के शीर्ष पर एक ढांचा का उपयोग कर रहे हैं जो Spring जैसे जॉब्सहेड्यूलिंग एपीआई प्रदान करता है, तो आपको इसका उपयोग करना चाहिए।

यदि कोई नहीं है (उदा। आप केवल टॉमकैट 6 का उपयोग कर रहे हैं), या आप कंटेनर और/या फ्रेमवर्क से स्वतंत्र होना चाहते हैं, तो ScheduledExecutorService के साथ ServletContextListener बनाएं। this answer में और जानकारी मिल सकती है।

या आप पहले से ही एक जावा ईई 6 कंटेनर जो EJB 3.1 का समर्थन करता है पर हैं (JBoss 6 के रूप में, ग्लासफिश 3, लेकिन इस प्रकार नहीं बिलाव 7), सबसे आसान @Schedule विधि के साथ एक @Singleton EJB बनाने के लिए है जब।

@Singleton 
public class UpdateSubscriptions { 

    @Schedule(hour="*/6", minute="0", second="0", persistent=false) 
    public void run() { 
     // Do your job here. 
    } 

}   

यही है। कोई और विन्यास आवश्यक नहीं है।


अद्यतन: टिप्पणियों के अनुसार, आप बिलाव (? 6 या 7) का उपयोग कर रहे हैं। वेब ऐप्लिकेशन की स्टार्टअप के दौरान एक धागा जो कार्य हर 6 घंटे चलाता है शुरू करने के लिए, उदाहरण के रूप में उपयोग beforelinked answer में उपलब्ध कराई गई और scheduleAtFixedRate() विधि

scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS); 

में निम्नलिखित परिवर्तन वर्ग UpdateSubscriptionsRunnable को लागू करना चाहिए और वास्तविक काम की जरूरत बनाने के run() विधि में किया जाना चाहिए जो आप @Override, जैसा कि लिंक किए गए उत्तर में उदाहरण के समान है।

+2

+1 इस से कोई भी जवाब नहीं मिल सकता है। – asgs

+0

मैं केवल टॉमकैट का उपयोग कर रहा हूं। मैंने लिंक किए गए उत्तर को भी देखा। 1. मैं इसे कक्षा में उपयोग करने का इरादा रखता था, जेएसपी का उपयोग नहीं करने के लिए crntlt था। लेकिन, सर्वलेट एक बेहतर तरीका है? 2. अगर मैं इसे एक सर्वलेट में डालता हूं जैसा कि लिंक किए गए उत्तर में दिखाया गया है, तो क्या यह हर 6 घंटे में नया धागा नहीं बनायेगा? – MalTec

+0

यह एक सर्वलेट नहीं है। यह एक श्रोता है। और वेबपैप के जीवनकाल में इसका केवल एक उदाहरण है (वैसे ही वैसे भी सर्वलेट पर लागू होता है)। – BalusC

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