如何安排任务以每月向不同时区发送电子邮件?
How to schedule a task to send monthly emails to different timezones?
我想在 spring 中编写一个调度程序,它应该在每个月的第一天触发,并向世界各地的不同用户发送电子邮件。有人可以帮我解决这个问题吗?
我拥有的项目是一个 spring 引导项目,其中 mongoDB 作为数据库。我有一个名为 machine_status 的集合。它存储了我们项目下注册的每台机器的所有状态。那里的所有数据都以 UTC 时间存储。要求是,在每个月的第一天。从集合 machine_status 中查找上个月在线的所有机器,并将这些机器详细信息发送给所有管理员用户,并将该详细信息存储在新集合中以供将来参考。这样我们就不用重新计算了。这里的问题是我们的管理员分布在世界的不同区域。我怎样才能安排一个任务来满足这一切。
例如,对于印度用户,一月份的时间范围与美国用户的时间范围不同。我们必须以毫秒为单位获得一个月的正确开始和结束时间,然后我们才能查询集合 machine_status 以检索该特定月份的数据。
您可以在要安排的函数上多次使用 @Scheduled
注释。
例如,如果你想运行两个时区的月份的第一天相同的工作,你可以使用下面的代码
@Schedule(dayOfMonth="first", zone = "IST")
@Schedule(dayOfMonth="first", zone = "UTC")
public void sendEmail() { ... }
如果区域数量较多,则可以使用for循环创建CronTriggers。
取一个月的第一天午夜为ZonedDateTime
在你想要的时区,转换成UTC,就有了起点(含)。下一个相同,您有端点(不包括)。使用这些到 UTC 时间戳,您可以轻松地为您的 MongoDB.
构建查询
至于确切的代码,请查看 ZonedDateTime
(https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/time/ZonedDateTime.html) 的 Javadocs 并查看 java.time
包中的另一个 类。
我想在 spring 中编写一个调度程序,它应该在每个月的第一天触发,并向世界各地的不同用户发送电子邮件。有人可以帮我解决这个问题吗? 我拥有的项目是一个 spring 引导项目,其中 mongoDB 作为数据库。我有一个名为 machine_status 的集合。它存储了我们项目下注册的每台机器的所有状态。那里的所有数据都以 UTC 时间存储。要求是,在每个月的第一天。从集合 machine_status 中查找上个月在线的所有机器,并将这些机器详细信息发送给所有管理员用户,并将该详细信息存储在新集合中以供将来参考。这样我们就不用重新计算了。这里的问题是我们的管理员分布在世界的不同区域。我怎样才能安排一个任务来满足这一切。 例如,对于印度用户,一月份的时间范围与美国用户的时间范围不同。我们必须以毫秒为单位获得一个月的正确开始和结束时间,然后我们才能查询集合 machine_status 以检索该特定月份的数据。
您可以在要安排的函数上多次使用 @Scheduled
注释。
例如,如果你想运行两个时区的月份的第一天相同的工作,你可以使用下面的代码
@Schedule(dayOfMonth="first", zone = "IST")
@Schedule(dayOfMonth="first", zone = "UTC")
public void sendEmail() { ... }
如果区域数量较多,则可以使用for循环创建CronTriggers。
取一个月的第一天午夜为ZonedDateTime
在你想要的时区,转换成UTC,就有了起点(含)。下一个相同,您有端点(不包括)。使用这些到 UTC 时间戳,您可以轻松地为您的 MongoDB.
至于确切的代码,请查看 ZonedDateTime
(https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/time/ZonedDateTime.html) 的 Javadocs 并查看 java.time
包中的另一个 类。