Пример | Выражение |
---|---|
Каждую среду в полночь | dayOfWeek = "Wed" |
Каждую среду в полночь | second = "0", minute = "0", hour = "0", dayOfMonth = "*", month = "*", dayOfWeek = "Wed", year = "*" |
Каждый будний день в 6:55 | minute = "55", hour = "6", dayOfWeek = "Mon — Fri" |
Каждый будний день в 6:55 по парижскому времени | minute = "55", hour = "6", dayOfWeek = "Mon — Fri", timezone = "Europe/Paris" |
Каждую минуту каждого часа каждого дня | minute = "*", hour = "*" |
Каждую секунду каждой минуты каждого часа каждого дня | second = "*", minute = "*", hour = "*" |
Каждые понедельник и среду через 30 секунд после полудня | second = "30", hour = "12", dayOfWeek = "Mon, Fri" |
Каждые пять минут в течение часа | minute = "*/5", hour = "*" |
Каждые пять минут в течение часа | minute = "0,5,10,15,20,25,30,35,40,45,50,55", hour = "*" |
Последний понедельник декабря в 3 часа дня | hour = "15", dayOfMonth = "Last Mon", month = "Dec" |
За три дня до конца каждого месяца в 1 час дня | hour = "13", dayOfMonth = "–3" |
Каждый второй час в течение дня, начиная с полудня каждый второй вторник каждого месяца | hour = "12/2", dayOfMonth = "2nd Tue" |
Каждые 14 минут в рамках часа в 1 и 2 часа ночи | minute = "*/14", hour="1, 2" |
Каждые 14 минут в рамках часа в 1 и 2 часа ночи | minute = "0,14,28,42,56", our = "1,2" |
Каждые 10 секунд в рамках минуты, начиная с 30 секунд | second = "30/10" |
Каждые 10 секунд в рамках минуты, начиная с 30 секунд | second = "30,40,50" |
Декларативное создание таймера
Таймеры могут быть созданы автоматически в контейнере во время развертывания на основе метаданных. Контейнер создает таймер для каждого метода, аннотированного @javax.ejb.Schedule или @Schedule (или XML-эквивалент в дескрипторе развертывания ejb-jar.xml). По умолчанию каждая аннотация @Schedule соответствует одному постоянному таймеру, но вы можете также определить непостоянные таймеры.
В листинге 8.3 показан компонент StatisticsEJB, в котором определены несколько методов. Метод statisticsItemsSold() создает таймер, который будет вызывать этот метод каждый первый день месяца в 5:30 утра. Метод generateReport() создает два таймера (с помощью аннотации @Schedule): один из них срабатывает каждый день в 2 часа ночи, а другой — каждую среду в 2 часа дня. Метод RefreshCache() создает непостоянный таймер, который будет обновлять кэш каждые десять минут.
@Stateless
public class StatisticsEJB {
··@Schedule(dayOfMonth = "1", hour = "5", minute = "30")
··public void statisticsItemsSold() {
····//…
··}
··@ Schedules({
····@ Schedule(hour = "2"),
····@ Schedule(hour = "14", dayOfWeek = "Wed")
··})
··public void generateReport() {
····//…
··}
··@Schedule(minute = "*/10", hour = "*", persistent = false)
··public void refreshCache() {
····//…
··}
}
Программное создание таймера