@Schedule annotation run every few minutes (or seconds)

As per the Javadoc for the @Schedule annotation, the default values are:

  • * for all fields except hour, minute, and second; and
  • 0 for hour, minute, and second, by default.

By specifying minute="*" and leaving hour at its default of 0, it requests that the timer run every minute after midnight for one hour (i.e., 00:00, 00:01, 00:02, …, 00:59) and then not again until the next day. Instead, use:

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

To run every few seconds (e.g., 10 seconds), you can use a cron-like syntax:

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

By default, the scheduler persists events. Setting persistent = false will prevent them from building up over time, if so desired.

Leave a Comment