为Spring的@Scheduled提供时区?

10 浏览
0 Comments

为Spring的@Scheduled提供时区?

如何为基于Spring的@Scheduled cron任务配置时区?

背景:

我有一个每天执行一次的任务,比如下午2点,使用Spring的@Scheduled注释:

@Scheduled(cron = "0 0 14 * * *")
public void execute() {
    // 执行定时任务
}

问题是2点在不同的服务器上有所不同,因为Spring在内部使用TimeZone.getDefault() 来确定。此外,TimeZone.getDefault()的JavaDoc指出:

获取此主机的默认时区。默认时区的来源可能因实现而异。

换句话说,时区并未确定。它可能取决于JVM实现、服务器时区配置、服务器位置和/或其他未知因素。因此,除非有一种明确设置要使用的时区的方法,否则cron任务将在不同的服务器上在不同的时间触发。

我正在使用Spring 3.2.2。


更新

从Spring 4开始,Spring Jira问题SPR-10456已经得到解决。因此,@Scheduled注释现在有一个新的zone属性,专门用于此目的。

0