on ‎2015 May 01 9:19 AM
Hi,
I'm trying to schedule a cronjob via Java code. Our case is that when I can't st scheduled cronjob that I should postpone it for 30 minutes. I thought the following code should work, but it doesn't and I can't find any documentation about it.
Does someone of you have an idea to create a trigger that will only run once on a specific time?
public void createTrigger(final CronJobModel cronJobModel) {
long t= new Date().getTime();
Date afterAddingThirtyMins=new Date(t + (1800000));
final TriggerModel triggerModel = modelService.create(TriggerModel.class);
triggerModel.setActive(Boolean.TRUE);
triggerModel.setActivationTime(afterAddingThirtyMins);
triggerModel.setRelative(true);
triggerModel.setCronJob(cronJobModel);
modelService.save(triggerModel);
}
I thought the code above should work, but the interval is now scheduled as daily while it should only run once.

Available method in TriggerModel:
setActivationTime(final Date value)
setActive(final Boolean value)
setCronExpression(final String value)
setCronJob(final CronJobModel value)
setDateRange(final StandardDateRange value)
setDay(final Integer value)
setDaysOfWeek(final List value)
setHour(final Integer value)
setJob(final JobModel value)
setMaxAcceptableDelay(final Integer value)
setMinute(final Integer value)
setMonth(final Integer value)
setRelative(final Boolean value)
setSecond(final Integer value)
setWeekInterval(final Integer value)
setYear(final Integer value)
Request clarification before answering.
I finally found out that I should set every date field with the right value, the following code worked for me:
private void createTrigger(final CronJobModel cronJobModel) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.MINUTE, 30);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm dd-MM-yyyy");
LOG.info("Cron job rescheduled to '" + sdf.format(calendar.getTime()) + "'");
final TriggerModel triggerModel = modelService.create(TriggerModel.class);
triggerModel.setActive(Boolean.TRUE);
triggerModel.setRelative(Boolean.FALSE);
triggerModel.setSecond(calendar.get(Calendar.SECOND));
triggerModel.setMinute(calendar.get(Calendar.MINUTE));
triggerModel.setHour(calendar.get(Calendar.HOUR_OF_DAY));
triggerModel.setDay(calendar.get(Calendar.DAY_OF_MONTH));
triggerModel.setMonth(calendar.get(Calendar.MONTH));
triggerModel.setYear(calendar.get(Calendar.YEAR));
triggerModel.setWeekInterval(0);
triggerModel.setCronJob(cronJobModel);
modelService.save(triggerModel);
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I think the question is a bit confusing. For making a cron job run only once we have something called "singleExecutable" it will make the job run only once.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi,
You can also use cronexpression to trigger a job once:
triggerModel.setCronExpression("0 30 12 29 06 ? 2016");
to set a trigger on June 29th 2016 at 12:30 PM.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You did not set "once" in your code.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I know, which method should I use? Available methods:
setActivationTime(final Date value) setActive(final Boolean value) setCronExpression(final String value) setCronJob(final CronJobModel value) setDateRange(final StandardDateRange value) setDay(final Integer value) setDaysOfWeek(final List value) setHour(final Integer value) setJob(final JobModel value) setMaxAcceptableDelay(final Integer value) setMinute(final Integer value) setMonth(final Integer value) setRelative(final Boolean value) setSecond(final Integer value) setWeekInterval(final Integer value) setYear(final Integer value)
| User | Count |
|---|---|
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.