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

我正在使用Quartz-Scheduler执行重复性任务,但遇到了麻烦。在我的服务器端,我的用户想要指定一些日期范围,例如

2013-09-2709:00 AM - 12:00 PM2013-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 ? *

?")

以上是 在特定的开始,结束日期和时间限制内运行Quartz Scheduler Job 的全部内容, 来源链接: utcz.com/qa/422748.html

回到顶部