2012-07-14 2 views
16

Ich mag würde versuchen, die @Schedule Anmerkung in folgender Weise zu verwenden:@Schedule Anmerkung alle paar Minuten (oder Sekunden) laufen

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 

auf dem Protokoll Basierend, die CronService leben und gut, aber die geplante Aufgabe 'runsEveryMinute' funktioniert nicht.

Wie soll es mit einer geplanten EJB-Aufgabe funktionieren?

Antwort

51

Gemäß den Javadoc für die @Schedule Anmerkung, sind die Standardwerte:

  • * für alle Felder mit Ausnahme von Stunde, Minute und Sekunde; und
  • 0 für Stunde, Minute und Sekunde, standardmäßig.

von minute="*" spezifizieren und an seinem Verzug 0 verlassen Stunde, es fordert, dass der Timer-Lauf jede Minute nach Mitternacht für eine Stunde (dh 00.00, 00.01, 00.02, ..., 00:59) und dann nicht wieder bis zum nächsten Tag. Verwenden Sie stattdessen:

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

alle paar Sekunden laufen (zum Beispiel 10 Sekunden), können Sie eine cron -ähnliche Syntax:

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

standardmäßig der Scheduler Ereignisse weiterhin besteht. Einstellung persistent = false verhindert, dass sie sich im Laufe der Zeit aufbauen, wenn dies gewünscht wird.