2012-07-14 2 views
16

마다 몇 분 (또는 초)를 실행 :@Schedule 주석은 나는 다음과 같은 방법으로 @Schedule 주석을 사용하려고하고 싶은

의 CronService 라이브 잘, 로그하지만 바탕으로
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 

예정된 작업 'runsEveryMinute'가 작동하지 않습니다.

EJB 예약 작업을 사용하여 어떻게 작동합니까? @Schedule 주석에 대한 Javadoc 당으로

답변

51

, 기본 값은 :시, 분, 초를 제외한 모든 필드에 대한

  • *; 시, 분, 초로는
  • 0입니다. minute="*"를 지정하고 0의 기본에 시간을 떠나는하여
, 그것은 타이머 실행하는 것이 한 시간 자정 이후 분마다 요청 (예 : 00:00, 0시 1분, 0시 2분, ..., 00:59) 다음 날까지 다시는 안됩니다. 대신, 사용 : 기본적으로

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

이, 스케줄러 이벤트를 지속 :

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

몇 초마다 (예를 들어, 10초)를 실행하려면, 당신은 cron -like 구문 사용할 수 있습니다. persistent = false으로 설정하면 시간이 지남에 따라 시간이 지날 수 있습니다.