【发布时间】:2020-12-03 07:28:14
【问题描述】:
我有多个 timeZone 客户,应用程序与 UTC 一起工作。所以,通常我实施
@Scheduled(cron = "0 10 0 * * ?") // This scheduler will run at 00:10 AM daily And Send Notification.
但问题是它在 UTC 时间上午 12:10 运行;但是,可能会因客户时区而异
例如。 UTC 00:10 AM 在 IST 是 5:40 AM,因此印度的客户将在 05:40 AM 而不是 IST 的 00:10 AM 收到通知。
要求:我需要在每个客户时区的上午 00:10 运行一个任务(调度程序),而不是在应用程序时区(UTC)中。
【问题讨论】:
-
您可以让它每小时运行一次并检查现在上午 12:10 是哪个时区,或者可以使用更动态的方法(例如石英时间表)计算需要运行的时间并提前安排。跨度>
-
“每小时运行一次” - 是的 - 或每 30 分钟运行一次,以考虑具有 30 分钟偏移量的国家(例如印度),甚至 15 分钟(尼泊尔)...
-
@locus2k 感谢重播。但是这个逻辑有冲突或问题,即(默认调度程序与应用程序 timeZone 一起运行,例如 UTC。让我们每小时或 30 分钟运行一次调度程序,我们检查每个 timeZone 时间现在是上午 12:10 但有可能在特定时间它总是围绕时间,而不是确切的 12:10 AM)所以我们错过了特定 timeZone 的 12:10 AM 时间//希望您理解
-
每 30 分钟运行一次调度程序从上午 12:10 开始。
-
另外,值得考虑观察到某种形式的Daylight Saving Time 的时区。为避免错过一份报告或一天发送两份报告,您可能更愿意提前预先计算每天的日程安排。这也适用于国家可以不时实施的临时调整。
标签: java spring spring-boot scheduled-tasks scheduler