Ok như vậy ở đây nó là tôi muốn sắp xếp một nhiệm vụ để chạy vào ngày cuối cùng của mỗi tháng trên biểu cron 10:10 AM.My đượcGiải pháp cho CronSequenceGenerator Ngày cuối cùng của tháng?
0 10 10 L * ?
Bây giờ vấn đề là CronSequenceGenerator được ném NumberFormatException cho 'L' value.Điều này có nghĩa là CronSequenceGenerator của Spring không hỗ trợ kiểu biểu thức này. Làm thế nào để thực hiện điều này theo bất kỳ cách nào khác (workaround). Tôi không muốn sử dụng quartz hoặc Spring có hỗ trợ điều này trong các bản phát hành mới hay không.
Dưới đây là toàn 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)
Cập nhật:
Sau đây là phương pháp lập kế hoạch của tôi
/**
* 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;
}
Và trên dòng 2 nó ném NumberFormatException khi tôi vượt qua quy định biểu hiện cron.
Tôi nhìn xung quanh một chút, và có vẻ như rằng L là thực sự được hỗ trợ. Bạn định nghĩa công việc như thế nào? Chú thích? Bạn có lẽ nên thêm điều này vào câu hỏi của bạn. – Magnilex
@Magnilex kiểm tra cập nhật –
Tuyệt vời. Bạn cũng có thể dán mã có liên quan gọi phương thức 'start()' không? Tôi xin lỗi về điều này, nhưng tôi thực sự nghĩ rằng việc sử dụng 'L' sẽ hoạt động. – Magnilex