web-dev-qa-db-ja.com

@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」は機能しません。

EJBのスケジュールされたタスクを使用してどのように機能しますか?

25
cscsaba

@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を設定すると、必要に応じて、時間がたつにつれて蓄積するのを防ぐことができます。

70
Brett Kail

スケジューラー構成については、以下の詳細を参照してください。

(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)

この情報が、要件に応じてスケジューラを構成するのに役立つことを願っています。

6
Radadiya Nikunj