当前位置: 首页 > 面试题库 >

在特定的开始,结束日期和时间限制内运行Quartz Scheduler Job

沈茂
2023-03-14
问题内容

我正在使用Quartz-Scheduler执行重复性任务,但遇到了麻烦。在我的服务器端,我的用户想要指定一些日期范围,例如 From
2013-09-27 with in 09:00 AM - 12:00 PM 2013-09-30

说明:

2013-09-272013-09-30但仅在之间运行作业09:00 AM - 12:00 PM

我在为其编写Cron表达式时遇到了麻烦,而且我的用户不是技术人员,所以我的用户希望我从两个时间戳值中自动创建Cron表达式

请帮帮我。让我知道是否还有其他方法。

我在Google上看到了很多资源,但仍然找不到。

链接:

http://quartz-
scheduler.org/documentation/quartz-1.x/tutorials/crontrigger

http://quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-
lesson-05

unix /
linux中的cron表达式是否允许指定确切的开始和结束日期

更新资料

我写了一个,但是没用

|------------------------------------------------------------------|
| Seconds | Minutes | Hours | DayOfMonth | Month | DayOfWeek | Year|
|         |         |       |            |       |           |     |
|   0     |    0    | 9-12  |   27-30    |   9   |     ?     | 2013|
|------------------------------------------------------------------|

尝试映射2013-09-272013-09-30但仅映射到09:00 AM - 12:00 PM

更新, 我也尝试过与

Trigger trigger = TriggerBuilder.newTrigger().withIdentity(NAME_TRIGGER_TASK_UPDATER, GROUP_TASK_TRIGGER)
                    .withSchedule(CronScheduleBuilder.cronSchedule("0 0 9-12 19-22 10 ? *")).build();

但是它不会产生任何错误,也不会进入我的工作的执行方法

cronSchedule("0 0 9-12 ? * ?") throws invalid schedule exception.

下面的代码在不考虑开始和结束日期的情况下运行它。

String startDateStr = "2013-09-27 00:00:00.0";
        String endDateStr = "2013-09-31 00:00:00.0";

        Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(startDateStr);
        Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(endDateStr);

        CronTrigger cronTrigger = newTrigger()
          .withIdentity("trigger1", "testJob")
          .startAt(startDate)
          .withSchedule(CronScheduleBuilder.cronSchedule("0 0 9-12 * * ?"))
          .endAt(endDate)
          .build();

问题答案:

当您说它不起作用时,您会得到什么错误?

您可以尝试以下代码( 编辑: 适用于Quartz
2.2)。此方法未在cron表达式中指定开始/结束日期和年份,而是使用Trigger方法指定它们。(注意:我自己尚未测试过,请告诉我它是否对您有用)

编辑: 我有机会测试此代码,我在下面的代码中运行并不断更改系统时钟,并且从开始到结束日期的上午9点至12点之间,所有触发器均成功。

public class CronJob {

    public static void main(String[] args) throws ParseException, SchedulerException {

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        JobDetail job = newJob(TestJob.class)
            .withIdentity("cronJob", "testJob") 
            .build();

        String startDateStr = "2013-09-27 00:00:00.0";
        String endDateStr = "2013-09-31 00:00:00.0";

        Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(startDateStr);
        Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(endDateStr);

        CronTrigger cronTrigger = newTrigger()
          .withIdentity("trigger1", "testJob")
          .startAt(startDate)
          .withSchedule(CronScheduleBuilder.cronSchedule("0 0 9-12 * * ?").withMisfireHandlingInstructionDoNothing())
          .endAt(endDate)
          .build();

        scheduler.scheduleJob(job, cronTrigger);
        scheduler.start();
    }

    public static class TestJob implements Job {
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println("this is a cron scheduled test job");
        }        
    }
}

如果上面的代码不能正常工作,尝试更换cronSchedule("0 0 9-12 * * ?")cronSchedule("0 0 9-12 ? * ?")



 类似资料:
  • 问题内容: 如果可能的话,在以下情况下,我希望使用joda或非joda解决方案 假设我的一周从2012年5月2日开始,给定的当前日期为02/22/2011。我需要计算给定当前日期的星期开始和结束日期。因此,我的解决方案的星期应该从02/19开始,而星期在02/25结束。为简单起见,我将我的工作日设置为02/05/2011,但是可能是任何一天,我的工作日始终为7天。 我现有的代码如下,但似乎无法按预

  • 问题内容: 我想检查日期是否在开始日期和结束日期之间。 我添加了一个where子句 但问题在于它不包含“ 2010-04-15”。 它应该包括结束日期,我该怎么办? 请帮我 问候, 潘卡 问题答案: 明确指定时间部分:

  • 我有一个类似于以下内容的DataFrame(sqlDF)(在本例中进行了简化),其中我试图删除在另一行的开始日期和结束日期范围内具有start_date和end_date的所有行: 首先,最终用户要求我删除start_date和end_date之间间隔小于5天的所有记录,我使用了以下方法: 从而产生如下所示的数据frame: 现在,我需要筛选出开始日期和结束日期在同一id的另一行开始日期和结束日期

  • 问题内容: 我有一个事件表,其中记录了一个开始和结束时间,作为MySQL DATETIME对象(格式。我想查找在特定日期范围内发生的所有事件。但是,事件可能跨越多天(并且超出了我的范围)日期范围,但是如果它们与我的日期范围重叠1秒或更长时间,我想返回它们。 有什么建议吗? 问题答案: 这将找到范围内完全包含的每个事件: 这将查找事件的任何部分与范围的任何部分重叠的任何事件:

  • 我有两个字符串作为startDate和endDate。这些值如下所示,例如: 现在让我们说,这些都是在山区时间作为startDate一天的开始和endDate一天的结束。但由于这些是字符串,我如何让程序理解这些字符串可以转换为山区当地时间,如: 时区是动态的。我可以从东部时间或任何其他时区获得时间戳字符串。 更新 我意识到我应该输入更多的信息。 所以我输入的Moutain时间就是一个例子。它可以来

  • 问题内容: 我在从表中显示正确的数据时遇到了麻烦。我不太确定要搜索什么。我不确定min(column)或max(column)在这里对我有帮助。让我们看看我是否可以解释我的问题。 我的表包含以下数据: 我将以一种观点来介绍这一点。它将按代码分组。 我想要的是此输出: 如您所见,DateTo和DateFrom之间是否存在间隙,我希望将其显示为两行。但是,如果具有相同代码的下一个“ DateFrom”