2012-07-14 20 views
16

birkaç dakikada (veya saniye) çalıştırın:@Schedule açıklama aşağıdaki şekilde @Schedule ek açıklama kullanmayı denemek istiyorum

, CronService canlı ve iyi, günlükte ama dayanarak
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 

zamanlanmış görev 'runsEveryMinute' çalışmıyor.

EJB zamanlanmış görevi kullanılarak nasıl çalışır? @Schedule ek açıklaması için Javadoc gereğince

cevap

51

, varsayılan değerler şunlardır: saat, dakika ve saniye dışındaki tüm alanlar için

  • *; ve varsayılan olarak saat, dakika ve saniye için
  • 0. minute="*" belirterek ve 0 ait varsayılanında saat bırakarak
, bu zamanlayıcı vadede bu bir saat boyunca gece yarısından sonra her dakika istekleri (yani 00:00 00:01, 00:02, ..., 00:59) ve bir sonraki güne kadar tekrar değil. Bunun yerine, kullanın: Varsayılan olarak

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

, zamanlayıcı olaylarını devam:

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

birkaç saniyede (örneğin 10 saniye) çalıştırmak için, bir cron benzer söz dizimi kullanabilirsiniz. persistent = false ayarı, eğer istenirse, zaman içinde birikmelerini önleyecektir.