@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」は機能しません。
EJBのスケジュールされたタスクを使用してどのように機能しますか?
@Schedule
アノテーションの Javadoc に従って、デフォルト値は次のとおりです。
*
(時、分、秒を除くすべてのフィールド)。そして0
。minute="*"
を指定し、時間をデフォルトの0
のままにしておくと、タイマーは午前0時から毎分1時間実行されるように要求します(つまり、00:00、00:01、00:02、..)。 。、00:59)そして、翌日まで再び。代わりに、次を使用します。
@Schedule(hour="*", minute="*")
数秒おきに(たとえば、10
秒)実行するには、 cron -like構文を使用できます。
@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false)
デフォルトでは、スケジューラはイベントを保持します。 persistent = false
を設定すると、必要に応じて、時間がたつにつれて蓄積するのを防ぐことができます。
スケジューラー構成については、以下の詳細を参照してください。
(1)1分ごとに実行する
@Schedule(hour = "*", minute = "*/1", persistent = false)
(2)5分ごとに実行する
@Schedule(hour = "*", minute = "*/5", persistent = false)
(3)30秒ごとに実行するには
@Schedule(hour = "*", minute = "*", second = "*/30", persistent = false)
(4)毎日午前6時に実行する
@Schedule(hour = "6", minute = "0", second = "0", persistent = false)
(5)毎週金曜日の午後2時に実行する
@Schedule(dayOfWeek = "Fri", hour = "14", persistent = false)
(6)毎月1日の午前5時に実行する
@Schedule(dayOfMonth="1", hour = "5", persistent = false)
この情報が、要件に応じてスケジューラを構成するのに役立つことを願っています。