本文介绍如何利用 quartz 调度框架替代 spring `@scheduled`,为同一业务逻辑配置多个时区(如 utc+8、utc-5、utc+1)下的精准每日零点触发,避免轮询浪费,提升调度准确性和可维护性。
Spring 原生的 @Scheduled 注解仅支持固定 cron 表达式(基于 JVM 默认时区解析),无法直接为不同地理时区配置独立触发时间。例如,你无法用一个 @Scheduled(cron = “0 0 0 * * ?”) 同时满足「北京时间 00:00」「纽约时间 00:00」「巴黎时间 00:00」——因为 cron 总是相对于 JVM 所在时区计算。
✅ 正确解法:使用 Quartz Scheduler(Spring Boot 官方深度集成),它原生支持为同一 Job 配置多个 Trigger,每个 Trigger 可绑定独立时区(TimeZone 实例),从而实现“一份业务逻辑、多时区精准触发”。
✅ 实现步骤(Spring Boot + Quartz)
-
添加依赖(pom.xml):