diff --git a/dolphinscheduler-api/pom.xml b/dolphinscheduler-api/pom.xml
index bac74da0b0..c10f443384 100644
--- a/dolphinscheduler-api/pom.xml
+++ b/dolphinscheduler-api/pom.xml
@@ -43,10 +43,6 @@
org.apache.dolphinscheduler
dolphinscheduler-dao
-
- org.apache.dolphinscheduler
- dolphinscheduler-server
-
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
index c1689c5bec..7c0a8637ad 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ExecutorService.java
@@ -30,7 +30,8 @@ import org.apache.dolphinscheduler.dao.entity.*;
import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
import org.apache.dolphinscheduler.dao.mapper.ProcessInstanceMapper;
import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
-import org.apache.dolphinscheduler.server.utils.ScheduleUtils;
+import org.apache.dolphinscheduler.dao.utils.cron.CronUtils;
+import org.quartz.CronExpression;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -512,8 +513,15 @@ public class ExecutorService extends BaseService{
List listDate = new LinkedList<>();
if(!CollectionUtils.isEmpty(schedules)){
for (Schedule item : schedules) {
- List list = ScheduleUtils.getRecentTriggerTime(item.getCrontab(), start, end);
- listDate.addAll(list);
+ CronExpression cronExpression = null;
+ try {
+ cronExpression = CronUtils.parse2CronExpression(item.getCrontab());
+ List list = CronUtils.getSelfFireDateList(start, end, cronExpression);
+ listDate.addAll(list);
+ } catch (ParseException e) {
+ logger.error(e.getMessage(), e);
+ continue;
+ }
}
}
if(!CollectionUtils.isEmpty(listDate)){
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
index 2d0e99a867..1e876239de 100644
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
+++ b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
@@ -33,14 +33,16 @@ import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.dao.entity.Schedule;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
import org.apache.dolphinscheduler.dao.utils.DagHelper;
+import org.apache.dolphinscheduler.dao.utils.cron.CronUtils;
import org.apache.dolphinscheduler.server.master.config.MasterConfig;
import org.apache.dolphinscheduler.server.utils.AlertManager;
-import org.apache.dolphinscheduler.server.utils.ScheduleUtils;
+import org.quartz.CronExpression;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
+import java.text.ParseException;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
@@ -213,8 +215,15 @@ public class MasterExecThread implements Runnable {
List listDate = Lists.newLinkedList();
if(!CollectionUtils.isEmpty(schedules)){
for (Schedule schedule : schedules) {
- List list = ScheduleUtils.getRecentTriggerTime(schedule.getCrontab(), startDate, endDate);
- listDate.addAll(list);
+ CronExpression cronExpression = null;
+ try {
+ cronExpression = CronUtils.parse2CronExpression(schedule.getCrontab());
+ List list = CronUtils.getSelfFireDateList(startDate, endDate, cronExpression);
+ listDate.addAll(list);
+ } catch (ParseException e) {
+ logger.error(e.getMessage(), e);
+ continue;
+ }
}
}
// get first fire date
diff --git a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ScheduleUtils.java b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ScheduleUtils.java
deleted file mode 100644
index 11730b9545..0000000000
--- a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/utils/ScheduleUtils.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.dolphinscheduler.server.utils;
-
-import org.quartz.impl.triggers.CronTriggerImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.text.ParseException;
-import java.util.Date;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * ScheduleUtils
- */
-public class ScheduleUtils {
-
- private static final Logger logger = LoggerFactory.getLogger(ScheduleUtils.class);
-
- /**
- * Get the execution time of the time interval
- * @param cron
- * @param from
- * @param to
- * @return
- */
- public static List getRecentTriggerTime(String cron, Date from, Date to) {
- return getRecentTriggerTime(cron, Integer.MAX_VALUE, from, to);
- }
-
- /**
- * Get the execution time of the time interval
- * @param cron
- * @param size
- * @param from
- * @param to
- * @return
- */
- public static List getRecentTriggerTime(String cron, int size, Date from, Date to) {
- List list = new LinkedList();
- if(to.before(from)){
- logger.error("schedule date from:{} must before date to:{}!", from, to);
- return list;
- }
- try {
- CronTriggerImpl trigger = new CronTriggerImpl();
- trigger.setCronExpression(cron);
- trigger.setStartTime(from);
- trigger.setEndTime(to);
- trigger.computeFirstFireTime(null);
- for (int i = 0; i < size; i++) {
- Date schedule = trigger.getNextFireTime();
- if(null == schedule){
- break;
- }
- list.add(schedule);
- trigger.triggered(null);
- }
- } catch (ParseException e) {
- logger.error("cron:{} error:{}", cron, e.getMessage());
- }
- return java.util.Collections.unmodifiableList(list);
- }
-}
\ No newline at end of file
diff --git a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/ScheduleUtilsTest.java b/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/ScheduleUtilsTest.java
deleted file mode 100644
index 4fbbdab70f..0000000000
--- a/dolphinscheduler-server/src/test/java/org/apache/dolphinscheduler/server/utils/ScheduleUtilsTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.dolphinscheduler.server.utils;
-
-import org.apache.dolphinscheduler.common.utils.DateUtils;
-import org.junit.Test;
-import java.util.Date;
-import static org.junit.Assert.assertEquals;
-
-/**
- * Test ScheduleUtils
- */
-public class ScheduleUtilsTest {
-
- /**
- * Test the getRecentTriggerTime method
- */
- @Test
- public void testGetRecentTriggerTime() {
- Date from = DateUtils.stringToDate("2020-01-01 00:00:00");
- Date to = DateUtils.stringToDate("2020-01-31 01:00:00");
- // test date
- assertEquals(0, ScheduleUtils.getRecentTriggerTime("0 0 0 * * ? ", to, from).size());
- // test error cron
- assertEquals(0, ScheduleUtils.getRecentTriggerTime("0 0 0 * *", from, to).size());
- // test cron
- assertEquals(31, ScheduleUtils.getRecentTriggerTime("0 0 0 * * ? ", from, to).size());
- }
-}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 59278f73cd..d1141eed96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -706,7 +706,6 @@
**/server/utils/SparkArgsUtilsTest.java
**/server/utils/FlinkArgsUtilsTest.java
**/server/utils/ParamUtilsTest.java
- **/server/utils/ScheduleUtilsTest.java
**/server/master/MasterExecThreadTest.java
**/dao/mapper/AccessTokenMapperTest.java
**/dao/mapper/AlertGroupMapperTest.java