当前位置: 首页 > 知识库问答 >
问题:

Quartz CronTrigger未在指定的startAt()时间触发

施学
2023-03-14

我有一个场景,我需要安排一个工作,必须每天在特定时间执行。当我用特定的时间作为调度器的开始时间来调度它时,quartz不会在设定的开始时间触发作业,而是在下一个周期即延迟24小时后触发作业。即使在检查下一个FireTime时,我们也会得到一天的延迟。

例如:我需要每天安排一项工作在晚上6点进行。今天(2018年3月27日)下午5点开始。工作没有开始,下一次火灾时间是2018年3月28日下午6点。

代码段:

Date startDateTime = new Date(scheduler.getStartDateTime());
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(startDateTime);
int hours = calendar.get(Calendar.HOUR_OF_DAY);
int minutes = calendar.get(Calendar.MINUTE);
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(scheduleTriggerName, schdeuleGroupName).startAt(startDateTime).withSchedule(dailyAtHourAndMinute(hours, minutes)).build();
JobDetail jobDetail = this.getJobDetail(schdeuleJobName, schdeuleGroupName);
SchedulerFactoryBean schedulerFactoryBean= new SchedulerFactoryBean();

QuartzAutowireBeanFactory jobFactory = new QuartzAutowireBeanFactory();
jobFactory.setApplicationContext(applicationContext);
schedulerFactoryBean.setJobFactory(jobFactory);
schedulerFactoryBean.scheduleJob(jobDetail, trigger)// scheduling the job

共有1个答案

曹茂材
2023-03-14

解决方案

一班轮:

Cron只处理1分钟的决议

calendar.setTime(startDateTime);
            calendar.set(Calendar.SECOND, 0); // this was the solution
            calendar.set(Calendar.MILLISECOND, 0); // this was the solution
            int hours = calendar.get(Calendar.HOUR_OF_DAY);
            int minutes = calendar.get(Calendar.MINUTE);
            trigger = TriggerBuilder.newTrigger();
            trigger.startAt(calendar.getTime()).withSchedule(dailyAtHourAndMinute(hours, minutes));
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(scheduleTriggerName, schdeuleGroupName).startAt(startDateTime).withSchedule(dailyAtHourAndMinute(hours, minutes)).build();
 类似资料:
  • 我试图在指定时间触发通知和警报。我已经将日志信息放在控制台上,以查看是否设置了正确的时间,并且一切正常。但是,仍然没有触发警报。请帮忙。 创建通知和警报的/Code/ /通知消息类/ 请帮帮我,我做错了什么?

  • 我如何暂停我的石英触发器,并在第二天在其指定的开始时间开始它?为(如)。我的cron表达式是*0/20 15-00**?所以当我暂停扳机时,它应该在第二天15:00开始。

  • 我在我的Spring MVC4项目中使用了Amazon推送通知。我每天早上8点用CronTrigger向Android应用程序发送推送通知。我还将Timezone与CronTrigger一起使用,这样用户就可以根据各自的时区获得通知。 下面是我的webconfig.java: 更新:在Cron表达式中有一个修正。我纠正了。 但问题还没有解决

  • 我试图在应用程序启动10分钟后生成警报。根据我的要求,无论用户关闭应用程序、关闭并再次打开,或者甚至在重新启动后,此警报都应该工作。下面是我的代码。 主要活动。Java语言 我的服务。java—这是服务类。 警报eciever.java 如果我没有关掉手机或重新启动手机,我就可以准时收到闹钟。我准时收到闹钟。 然而,如果我关闭并打开手机,或者如果我重新启动手机,我会在手机打开/重新启动后立即收到警

  • startAt: Object 设置动画属性开始时的值 TweenMax.to(mc, 2, {x:500, startAt:{x:200}}); startAt适用于TweenMax startAt的参数 startAt 示例 body { background: #f8f8f8; font-family: Helvetica Neue, Helvetica, Arial, sa

  • 我很难找到sinon间谍没有被触发的原因。在下面的测试中,两个控制台语句都报告为false,因此两个方法都没有被调用(以防出现错误)。 这是我的一个摩卡测试通常的样子: }); PostOnToller中的方法: 最后是PostModel中的方法: 如果我以正常的方式调用方法,它们会执行查找,返回预期的Posts数组。但是,不会执行间谍。另外,如果我将控制器类中的方法更改为 间谍函数(res)确实