就像标题一样,在每个时区中,有些任务需要在凌晨0点执行,但是@计划
注释只支持设置一个区域,如下所示:
@Scheduled(cron = "0 0 0 * * ?", zone = "Asia/Shanghai")
public void scheduleTask() {...}
我只能在早上0点在“亚洲/上海”执行任务,我如何在每个时区执行这个任务?Spring调度程序支持或任何其他工具能帮助我吗?
抱歉,我可能没有清楚地描述这个问题。
这是我们的任务场景。我们有一个任务要在月的第一天早上0点执行,但每个国家都有不同的UTC,那么我如何在每个国家早上0点执行此任务。?
我们有一个国家表,我可以使用国家代码获取资本UTCzoneId
,如下所示:
CN-
我认为,如果你创建几个触发器,并根据你需要的时区列表将它们设置为你需要执行任务的时间,你会得到更好的服务。
尤其是当工作取决于任务的时区时。
List<Integer> timezoneDelays = Arrays.asList(1, 2, 5);
for (double d : timezoneDelays){
CronTrigger cronTrigger = new CronTrigger("0 0 " + d + " * * ?");
taskScheduler.schedule(new RunnableTask("Cron Trigger"), cronTrigger);
}
http://www.baeldung.com/spring-task-scheduler
此外,简单地将任务设置为每小时或半小时启动一次也可能对您有用。
我只想警告一下将一个国家映射到偏移量的方法,主要是因为:
因此,将一个国家映射到偏移量是一种非常简单且容易出错的方法。它可能在某些情况下有效,但并不能保证在所有国家、所有时间、所有月份都有效。事实上,它在很多情况下都会失败。
理想的方法是使用IANA的时区名称,格式为大陆/地区
(如America/New_York
或Asia/Shanghai
),并使用一个可以处理DST问题并自动为您计算正确偏移量的API。对于拥有一个以上时区的国家,您必须任意选择一个IANA名称,基于一些标准(例如:在美国,我应该使用America/New_York
,America/芝加哥
,America/Los_Angeles
吗?由您决定)。
我还建议您使用Java 8 datetime API(如果可用)(对于较低版本,建议使用Three-Ten backport)。这个API为您处理时区和DST内容,您可以获得每个时区中对应于午夜的准确UTC时刻。
List<String> timezones = // timezones you want
// month that I care about (example: March 2018)
YearMonth yearMonth = YearMonth.of(2018, 3);
for (String zoneName : timezones) {
ZoneId zone = ZoneId.of(zoneName);
// get midnight at first day of month, in this timezone
ZonedDateTime utc = yearMonth
// 1st of month
.atDay(1)
// midnight at the timezone
.atStartOfDay(zone)
// convert to UTC
.withZoneSameInstant(ZoneOffset.UTC);
// get the fields you need to configure the job
utc.getDayOfMonth();
utc.getHour();
... etc
}
使用此代码,变量utc
将相当于每个时区的午夜(或一天中的第一个时刻,例如,当DST在午夜开始时),但已转换为utc的值。您可以获取日、月、年、小时、分钟,以及任何您想要的(UTC)信息,以便将作业配置为恰好在该时刻运行。
本文向大家介绍python 定时器,实现每天凌晨3点执行的方法,包括了python 定时器,实现每天凌晨3点执行的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python 定时器,实现每天凌晨3点执行的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 除了凌晨3点,是否有可能每隔15分钟(每小时等等)运行一次cronjob? 我还有一个特殊的cronjob,我想在凌晨3点运行,但是我不希望其他人同时运行… 问题答案: 有一条cron线,没有。有三个,是的:
下午好. 抱歉我把你弄糊涂了。如果有任何问题请告诉我。有人帮忙吗? 谢谢。 维斯瓦 --1小时:30分钟--所以从1:00到1:59:59的任何值都是第二个实例值,且时区为MST。
本文向大家介绍python 获取当天凌晨零点的时间戳方法,包括了python 获取当天凌晨零点的时间戳方法的使用技巧和注意事项,需要的朋友参考一下 最近写python,遇到了一个问题,需要获取当日凌晨零点的时间戳,网上实在没有找到,自己手写了一个,有点挫 输出如下: 1518105600 Fri Feb 9 00:00:00 2018 1518105600 以上这篇python 获取当天凌晨零点的
本文向大家介绍Python 时间戳之获取整点凌晨时间戳的操作方法,包括了Python 时间戳之获取整点凌晨时间戳的操作方法的使用技巧和注意事项,需要的朋友参考一下 Python时间戳操作很多,每次用点时候总是去查,查的麻烦,现在自己也好好归纳一下。 我现在刚好有个需求需要获取当天零点时间戳,但是网上查的大部分都是用时间戳相减,或者用时区的方式,总感觉不是很好,我就自己写了一个。 获取凌晨时间
我试图设置一个作业在一个用户使用Quartz的时区的特定时间的单一执行。现在,开箱即用,告诉调度器执行时区中的任何内容的唯一方法是通过。对于Coors,我可能会将datetime转换为cron表达式,然后在第一次成功执行后立即停止触发器,但这有点难闻。 谢谢,