2012-07-14 12 views
16

मैं निम्नलिखित तरीके से @Schedule एनोटेशन इस्तेमाल करने की कोशिश करना चाहते हैं चलाएँ:@Schedule एनोटेशन हर कुछ मिनट (या सेकंड)

public class MyTestServlet extends HttpServlet { 
    private static JcanLogger LOG = JcanLoggerFactory.getLogger(ServiceTestServlet.class); 

    @EJB CronService cronService; 

    public void service(HttpServletRequest req, HttpServletResponse resp) throws .... { 
    .... 
    cronService.iLive(); 
} 
--- 
    @Local // because the ejb is in a servlet (there is no other jvm) 
public interface CronService { 

    public void iLive(); 
    public void runsEveryMinute(); 
} 
--- 
@Singleton 
public class CronServiceBean implements CronService { 
    private static final JcanLogger LOG = JcanLoggerFactory.getLogger(CronServiceBean.class); 

    @Schedule(minute="*") 
    public void runsEveryMinute() { 
     LOG.info(" runs EveryMinute "); 
    } 

    public void iLive() { 
     LOG.info("iLive"); 

    } 
--- 
LOG 
... 
CronServiceBean:34 ] iLive 

लॉग, CronService लाइव और अच्छी तरह से है, लेकिन के आधार पर अनुसूचित कार्य 'चलता है हर मिनट' काम नहीं करता है।

यह किसी ईजेबी निर्धारित कार्य का उपयोग करके कैसे कार्य करना चाहिए?

उत्तर

51

@Schedule एनोटेशन के लिए Javadoc के अनुसार, मूलभूत मूल्यों हैं:

  • घंटा, मिनट, और दूसरे को छोड़कर सभी क्षेत्रों के लिए *; और
  • 0 डिफ़ॉल्ट रूप से घंटे, मिनट और दूसरे के लिए।

minute="*" निर्दिष्ट करने और 0 की अपनी डिफ़ॉल्ट पर घंटे छोड़ने करके, यह अनुरोध करता है कि टाइमर रन एक घंटे के लिए आधी रात के बाद हर मिनट (यानी 00:00, 00:01, 00:02, ..., 00:59) और फिर अगले दिन तक फिर से नहीं। इसके बजाय, का उपयोग करें:

@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false) 

डिफ़ॉल्ट रूप से, अनुसूचक घटनाओं बनी रहती है:

@Schedule(hour="*", minute="*") 

हर कुछ सेकंड (जैसे, 10 सेकंड) चलाने के लिए, यदि आप एक cron तरह सिंटैक्स का उपयोग कर सकते हैं। persistent = false सेट करना उन्हें वांछित होने पर समय के साथ निर्माण करने से रोक देगा।

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