我有一个简单的时间表,如下所示,应该从下午6点到晚上10:30每30分钟运行一次。
import javax.ejb.Schedule;
import javax.ejb.Schedules;
import javax.ejb.Singleton;
@Singleton
public class XxxJob {
@Schedules({
@Schedule(minute = "0,30", hour = "18-22", dayOfWeek = "Mon-Fri",
timezone = "Europe/London", persistent = false)
})
public void process() {
//...
}
}
但是当我在Wildfly控制台上检查计时器的细节时,我看到了:
{"剩余时间" => 30039141L,"下一个超时" => 1498757400000L,"日历计时器" =>真,#&34;持久性" =>假,"时间表" => {"一年" => " *""一个月" => " *""天的日" => " *""&#34星期几-; => "周一至周五""小时" => #&34; 18-22""分钟" => " 0,30""第二" => " 0""时区" => "欧洲/伦敦""启动" =>未定义,"端" =>未定义}}
它表示下一次运行(next-timeout)位于1498757400000L
(epoch millis),但对应于2017-06-29T18:30+01:00[Europe/London]
而不是18:00。
为什么计时器计划在18:30而不是18:00运行?
注1:如果我将时间表修改为仅在18:00运行,则按预期工作:
@Schedule(minute = "0", hour = "18", dayOfWeek = "Mon-Fri",
timezone = "Europe/London", persistent = false)
注2:如果删除@Schedules
注释,它也会按预期工作。