2012-07-14 14 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は生き、よく、しかし、スケジュールされたタスク 'runsEveryMinute' does not work。

EJBスケジュールされたタスクの使用方法は? @Schedule注釈にJavadocあたりとして

答えて

51

、デフォルト値は次のとおりです。時、分、秒を除くすべてのフィールドの

  • *。時、分、秒の場合は
  • 0です。 minute="*"を指定し、0のデフォルトの時間を残すことによって
、それはタイマー実行すること1時間の真夜中後の毎分を要求する(つまり、午前0時00分、午後12時01分、午後12時02分、...、 00:59)、その後は翌日までは再開しません。数秒ごとに(例えば、 10秒)を実行するには、 cron様の構文を使用することができます

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

:代わりに、使用デフォルトで

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

を、スケジューラはイベントを持続します。 persistent = falseを設定すると、必要に応じて時間の経過とともにそれらが蓄積するのを防ぎます。

関連する問題