Ok, so ist es hier möchte ich eine Aufgabe planen am letzten Tag eines jeden Monats auf 10.10 AM.My Cron-Ausdruck zu laufen istProblemumgehung für CronSequenceGenerator Letzter Tag des Monats?
0 10 10 L * ?
Nun das Problem ist CronSequenceGenerator ist Number für ‚L‘ zu werfen Das bedeutet, dass Spring's CronSequenceGenerator diese Art von Ausdruck nicht unterstützt. Wie kann ich das anders machen (Workaround). Ich möchte keinen Quarz verwenden oder Wird der Frühling das in neuen Versionen unterstützen? Hier
ist voll 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)
Update:
Es folgt mein Scheduling-Verfahren
/**
* 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;
}
Und auf der Linie 2 wirft Number wenn ich Cron-Ausdruck angegeben passieren.
Ich sah mich um ein wenig, und es scheint, dass L tatsächlich unterstützt wird. Wie definierst du den Job? Anmerkung? Sie sollten dies wahrscheinlich zu Ihrer Frage hinzufügen. – Magnilex
@Magnilex überprüfen update –
Großartig. Könnten Sie auch den entsprechenden Code einfügen, der die 'start()' Methode aufruft? Es tut mir leid, aber ich denke wirklich, dass 'L' funktionieren sollte. – Magnilex