@Schedule
для автоматических таймеров, созданных контейнером во время развертывания.
С другой стороны, вы можете использовать TimerService
, что позволяет вам определять во время выполнения, когда *Необходимо вызвать метод 1007 *.
Это может быть интересным материалом для: Учебное пособие по Java EE 6 - Использование службы таймера .
РЕДАКТИРОВАТЬ: Просто чтобы сделать этот ответ более полным.Если это вопрос возможно ли , то ответ будет - да, это так.
Существует способ «изменить параметры» автоматического таймерасоздан с @Schedule
.Тем не менее это довольно необыкновенно - оно отменяет автоматический таймер и создает аналогичный программный таймер:
// Automatic timer - run every 5 seconds
// It's a automatic (@Schedule) and programmatic (@Timeout) timer timeout method
// at the same time (which is UNUSUAL)
@Schedule(hour = "*", minute = "*", second = "*/5")
@Timeout
public void myScheduler(Timer timer) {
// This might be checked basing on i.e. timer.getInfo().
firstSchedule = ...
if (!firstSchedule) {
// ordinary code for the scheduler
} else {
// Get actual schedule expression.
// It's the first invocation, so it's equal to the one in @Schedule(...)
ScheduleExpression expr = timer.getSchedule();
// Your new expression from now on
expr.second("*/7");
// timers is TimerService object injected using @Resource TimerService.
// Create new timer based on modified expression.
timers.createCalendarTimer(expr);
// Cancel the timer created with @Schedule annotation.
timer.cancel();
}
}
Еще раз - лично я никогда не использовал бы такой код и никогда не хотел бы видеть что-либокак в реальном проекте :-) Либо таймер:
- автоматический и создается с помощью
@Schedule
путем жесткого кодирования значений или определения их в ejb-jar.xml, - программно и создается кодом приложения, который может иметь различные значения во время выполнения.