本文介绍如何利用 quartz 调度框架替代原生 spring scheduler,为同一业务逻辑配置多个时区(如 utc+8、utc-5、utc+1)下的独立触发时间(例如每日 00:00),避免轮询式低效方案,实现精准、可维护、高扩展的多时区定时调度。
Spring 内置的 @Scheduled 注解基于 JVM 默认时区且不支持为单个任务动态绑定多个时区——它仅能按固定 cron 表达式(如 “0 0 0 * * ?”)在单一时区下执行。若需在 T1(如 Asia/Shanghai)、T2(如 America/New_York)、T3(如 Europe/Berlin)三个时区各自每日 00:00 触发同一段业务逻辑,硬编码多个 @Scheduled 方法不仅违反 DRY 原则,更导致配置分散、难以动态增删时区。
✅ 正确解法:采用 Quartz + Spring Boot 集成方案。Quartz 原生支持为同一个 JobDetail 绑定多个 Trigger,每个 Trigger 可独立配置 Cron 表达式与专属时区(TimeZone 实例),完美契合需求。