cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Trigger a Cron Job only once via Java code

Former Member
0 Likes
3,144

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)

View Entire Topic
Former Member
0 Likes

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);
     }
Former Member
0 Likes

Yes, I was just about to respond with a side-by-side comparison of Once and Daily, see image. 🙂