提交 94aba8af authored 作者: junjie's avatar junjie

feat(backend):定时任务优化

上级 6fe0f5f1
...@@ -73,7 +73,7 @@ public class ScheduleManager { ...@@ -73,7 +73,7 @@ public class ScheduleManager {
triggerBuilder.withIdentity(triggerKey); triggerBuilder.withIdentity(triggerKey);
Date nTimeByCron = getNTimeByCron(cron); Date nTimeByCron = getNTimeByCron(cron, startTime);
if (startTime.before(new Date())) { if (startTime.before(new Date())) {
triggerBuilder.startAt(nTimeByCron); triggerBuilder.startAt(nTimeByCron);
} }
...@@ -156,7 +156,7 @@ public class ScheduleManager { ...@@ -156,7 +156,7 @@ public class ScheduleManager {
triggerBuilder.withIdentity(triggerKey);// 触发器名,触发器组 triggerBuilder.withIdentity(triggerKey);// 触发器名,触发器组
Date nTimeByCron = getNTimeByCron(cron); Date nTimeByCron = getNTimeByCron(cron, startTime);
if (startTime.before(new Date())) { if (startTime.before(new Date())) {
triggerBuilder.startAt(nTimeByCron); triggerBuilder.startAt(nTimeByCron);
} }
...@@ -410,22 +410,38 @@ public class ScheduleManager { ...@@ -410,22 +410,38 @@ public class ScheduleManager {
return returnMap; return returnMap;
} }
public static Date getNTimeByCron(String cron) { // public static Date getNTimeByCron(String cron) {
try { // try {
CronTriggerImpl cronTriggerImpl = new CronTriggerImpl(); // CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
cronTriggerImpl.setCronExpression(cron); // cronTriggerImpl.setCronExpression(cron);
Calendar calendar = Calendar.getInstance(); // Calendar calendar = Calendar.getInstance();
Date now = calendar.getTime(); // Date now = calendar.getTime();
// calendar.add(java.util.Calendar.YEAR, 1); //// calendar.add(java.util.Calendar.YEAR, 1);
calendar.add(Calendar.MONTH, 2); // calendar.add(Calendar.MONTH, 2);
//
List<Date> dates = TriggerUtils.computeFireTimesBetween(cronTriggerImpl, null, now, calendar.getTime()); // List<Date> dates = TriggerUtils.computeFireTimesBetween(cronTriggerImpl, null, now, calendar.getTime());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nextTime = dateFormat.format(dates.get(0)); // String nextTime = dateFormat.format(dates.get(0));
Date date = dateFormat.parse(nextTime); // Date date = dateFormat.parse(nextTime);
return date; // return date;
} catch (Exception e) { // } catch (Exception e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
// }
// }
public static CronTrigger getCronTrigger(String cron) {
if (!CronExpression.isValidExpression(cron)) {
throw new RuntimeException("cron :" + cron + " error");
}
return TriggerBuilder.newTrigger().withIdentity("Calculate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
}
public static Date getNTimeByCron(String cron, Date start) {
CronTrigger trigger = getCronTrigger(cron);
if (start == null) {
start = trigger.getStartTime();
} }
return trigger.getFireTimeAfter(start);
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论