如何为基于 Spring 的@Scheduled cron 作业配置时区?
背景:
我有一份工作每天执行一次,比如下午 2 点,使用 Spring 的@Scheduled
注释:
@Scheduled(cron = "0 0 14 * * *")
public void execute() {
// do scheduled job
}
问题是不同服务器之间的 2 PM 不同,因为 Spring 在TimeZone.getDefault()
内部使用 on 。此外,JavaDoc ofTimeZone.getDefault()
声明:
获取此主机的默认时区。默认时区的来源可能因实现而异。
换言之,时区未确定。它可能取决于 JVM 实现、服务器时区配置、服务器位置和/或其他未知因素。因此,cron 作业在不同服务器上的不同时间触发,除非有办法明确设置应该使用哪个时区?
我正在使用 Spring 3.2.2。
更新
从 Spring 4 开始,Spring Jira 问题SPR-10456已得到解决。因此,@Scheduled
注释具有正是用于此目的的新区域属性。