You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中用@Scheduled实现UTC时间每小时01分执行任务

Spring Boot中使用@Scheduled实现UTC时间每小时01分执行任务

正确的Cron表达式及时区配置

要实现UTC时间的00:01、01:01、02:01等每小时整点过1分执行任务,对应的Cron表达式为:0 1 * * * ?,同时必须指定UTC时区——否则Spring Boot会默认使用系统本地时区,导致触发时间不符合要求。

你可以通过两种方式指定时区:

  • 直接在@Scheduled注解中配置zone属性
  • 全局配置所有定时任务使用UTC时区

具体实现步骤

1. 开启定时任务支持

在Spring Boot启动类上添加@EnableScheduling注解,启用定时任务功能:

@SpringBootApplication
@EnableScheduling
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

2. 编写定时任务组件

创建一个Spring组件类,在任务方法上添加@Scheduled注解,指定Cron表达式和UTC时区:

@Component
public class HourlyScheduledTask {

    @Scheduled(cron = "0 1 * * * ?", zone = "UTC")
    public void runHourlyTask() {
        // 这里编写你的任务逻辑
        System.out.println("任务执行(UTC时间):" + Instant.now());
    }
}

3. 全局配置UTC时区(可选)

如果你的项目中有多个定时任务都需要使用UTC时区,可以在application.properties或application.yml中全局配置:

# application.properties
spring.scheduled.cron.zone=UTC

配置后,@Scheduled注解中可以省略zone属性,直接写Cron表达式即可:

@Scheduled(cron = "0 1 * * * ?")
public void runHourlyTask() {
    // 任务逻辑
}

表达式说明

0 1 * * * ? 的含义拆解:

  • 0:秒位,指定第0秒执行
  • 1:分位,指定第1分钟执行
  • *:小时位,任意小时都触发
  • *:日期位,任意日期都触发
  • *:月份位,任意月份都触发
  • ?:星期位,不指定星期(避免与日期位冲突,因为我们已经指定了任意日期)

内容的提问来源于stack exchange,提问作者Vibhu Upamanyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:00:55