Ok così qui è che voglio pianificare un'attività per eseguire l'ultimo giorno di ogni mese sull'espressione cron 10:10 AM.My èSoluzione alternativa per CronSequenceGenerator L'ultimo giorno del mese?
0 10 10 L * ?
Ora il problema è CronSequenceGenerator sta gettando NumberFormatException per 'L' value.Questo significa che il CronSequenceGenerator di Spring non supporta questo tipo di espressione. Come fare in un altro modo (soluzione alternativa). Non voglio usare il quarzo o Spring lo sosterrà nelle nuove versioni.
Qui è pieno stacktrace:
Exception in thread "main" java.lang.NumberFormatException: For input string: "L"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.valueOf(Integer.java:582)
at org.springframework.scheduling.support.CronSequenceGenerator.getRange(CronSequenceGenerator.java:324)
at org.springframework.scheduling.support.CronSequenceGenerator.setNumberHits(CronSequenceGenerator.java:297)
at org.springframework.scheduling.support.CronSequenceGenerator.setDays(CronSequenceGenerator.java:275)
at org.springframework.scheduling.support.CronSequenceGenerator.setDaysOfMonth(CronSequenceGenerator.java:266)
at org.springframework.scheduling.support.CronSequenceGenerator.parse(CronSequenceGenerator.java:239)
at org.springframework.scheduling.support.CronSequenceGenerator.<init>(CronSequenceGenerator.java:81)
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:54)
at org.springframework.scheduling.support.CronTrigger.<init>(CronTrigger.java:44)
at com.hcdc.coedp.datantar.scheduler.SchedulerUtil.start(SchedulerUtil.java:75)
at com.hcdc.coedp.datantar.scheduler.SchedulerUtil.changeTrigger(SchedulerUtil.java:106)
at com.hcdc.coedp.datantar.scheduler.SchedulingService.scheduleTransfer(SchedulingService.java:70)
at com.hcdc.coedp.datantar.scheduler.Scheduler.schedule(Scheduler.java:107)
at main.Main.main(Main.java:47)
Aggiornamento:
segue è il mio metodo di pianificazione
/**
* Schedule a task {@link Task} with a specified cron expression.
* @param task {@link Task}
* @param cronExpression cron expression to be applied must be a vaild one.
* @param taskName
* @return
*/
public String start(Task task, String cronExpression, String taskName) {
CronTrigger trigger = new CronTrigger(cronExpression);//line 2
CronSequenceGenerator generator = new CronSequenceGenerator(cronExpression, TimeZone.getTimeZone("GMT+5:30"));
List<Date> dateList = new ArrayList<>(5);
Date currentDate = new Date();
for (int i = 0; i < 5; i++) {
currentDate = generator.next(currentDate);
dateList.add((currentDate));
System.out.println("Next Exceution times are" + currentDate);
}
ScheduledFuture sf = tps.schedule(task, trigger);
//TODO Save this scheduled future with a specific task name.
ContextHolder.schduledFutureMap.put(taskName, sf);
return cronExpression;
}
E sulla linea 2 getta NumberFormatException quando passo specificato espressione cron.
ho guardato un po 'intorno, e sembra che L è effettivamente supportato. Come stai definendo il lavoro? Annotazione? Probabilmente dovresti aggiungere questo alla tua domanda. – Magnilex
@Magnilex verifica aggiornamento –
Grande. Potresti anche incollare il codice rilevante che chiama il metodo 'start()'? Mi dispiace per questo, ma penso davvero che usare 'L' dovrebbe funzionare. – Magnilex