如何获取 EJB @Schedule 过期日期时间
How to get EJB @Schedule expired date time
是否可以获取@Schedule 过期的date/time?
如果 运行@Schedule 有延迟,那么实际过期时间是过去的时间。例如当服务器在关闭后重新启动时,永久计时器将 运行 错过 @Schedule。
我试过的示例作业。
import java.util.Date;
import javax.ejb.Schedule;
import javax.ejb.Stateless;
import javax.ejb.Timer;
@Stateless
public class SimpleJob {
@Schedule(hour="*", minute = "*/1", second = "0", persistent = true) // Every 1 minute
public void schedule(Timer timer) {
System.out.println("Now: " + new Date());
System.out.println("\tTime remaining: "+ timer.getTimeRemaining());
System.out.println("\tNext Timeout: "+timer.getNextTimeout());
System.out.println("\tInfo: "+timer.getInfo());
}
}
当我在关机后重新启动服务器时,我错过了 10:34:00 和 10:35:00 @Schedule
Now: Wed Feb 04 10:35:05 EST 2015
Time remaining: 54235
Next Timeout: Wed Feb 04 10:36:00 EST 2015
Now: Wed Feb 04 10:35:05 EST 2015
Time remaining: 54233
Next Timeout: Wed Feb 04 10:36:00 EST 2015
Info: null
它正确地 运行 错过了 @Schedule,但我不知道每个人什么时候打算 运行(这对我的代码很重要)。
您可以获得ScheduleExpression from Timer。现在从这个表达式中,您可以获得 date/time 详细信息。
来自文档:
timer.getSchedule(): Get the schedule expression corresponding to this
timer. The timer must be a calendar-based timer. It may have been
created automatically or programmatically.
不幸的是,没有办法知道当前定时器回调被安排在什么时间,只能使用 Timer.getNextTimeout() 来确定下一个预定时间。令我惊讶的是,在您的示例中,getNextTimeout 正在为两者报告 10:36。我想知道这是否是缺陷?
是否可以获取@Schedule 过期的date/time?
如果 运行@Schedule 有延迟,那么实际过期时间是过去的时间。例如当服务器在关闭后重新启动时,永久计时器将 运行 错过 @Schedule。
我试过的示例作业。
import java.util.Date;
import javax.ejb.Schedule;
import javax.ejb.Stateless;
import javax.ejb.Timer;
@Stateless
public class SimpleJob {
@Schedule(hour="*", minute = "*/1", second = "0", persistent = true) // Every 1 minute
public void schedule(Timer timer) {
System.out.println("Now: " + new Date());
System.out.println("\tTime remaining: "+ timer.getTimeRemaining());
System.out.println("\tNext Timeout: "+timer.getNextTimeout());
System.out.println("\tInfo: "+timer.getInfo());
}
}
当我在关机后重新启动服务器时,我错过了 10:34:00 和 10:35:00 @Schedule
Now: Wed Feb 04 10:35:05 EST 2015
Time remaining: 54235
Next Timeout: Wed Feb 04 10:36:00 EST 2015
Now: Wed Feb 04 10:35:05 EST 2015
Time remaining: 54233
Next Timeout: Wed Feb 04 10:36:00 EST 2015
Info: null
它正确地 运行 错过了 @Schedule,但我不知道每个人什么时候打算 运行(这对我的代码很重要)。
您可以获得ScheduleExpression from Timer。现在从这个表达式中,您可以获得 date/time 详细信息。
来自文档:
timer.getSchedule(): Get the schedule expression corresponding to this timer. The timer must be a calendar-based timer. It may have been created automatically or programmatically.
不幸的是,没有办法知道当前定时器回调被安排在什么时间,只能使用 Timer.getNextTimeout() 来确定下一个预定时间。令我惊讶的是,在您的示例中,getNextTimeout 正在为两者报告 10:36。我想知道这是否是缺陷?