feat(backend):定时任务优化

This commit is contained in:
junjie 2021-06-09 13:53:10 +08:00
parent 6fe0f5f178
commit 94aba8af70

View File

@ -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 {
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 {
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());
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String nextTime = dateFormat.format(dates.get(0));
// Date date = dateFormat.parse(nextTime);
// return date;
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// }
List<Date> dates = TriggerUtils.computeFireTimesBetween(cronTriggerImpl, null, now, calendar.getTime()); public static CronTrigger getCronTrigger(String cron) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if (!CronExpression.isValidExpression(cron)) {
String nextTime = dateFormat.format(dates.get(0)); throw new RuntimeException("cron :" + cron + " error");
Date date = dateFormat.parse(nextTime); }
return date; return TriggerBuilder.newTrigger().withIdentity("Calculate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
} catch (Exception e) {
throw new RuntimeException(e); }
}
public static Date getNTimeByCron(String cron, Date start) {
CronTrigger trigger = getCronTrigger(cron);
if (start == null) {
start = trigger.getStartTime();
}
return trigger.getFireTimeAfter(start);
} }
} }