为Spring的@Scheduled提供时区?
- 论坛
- 为Spring的@Scheduled提供时区?
10 浏览
为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属性,专门用于此目的。