diff --git a/iBase4J-Biz-Web/pom.xml b/iBase4J-Biz-Web/pom.xml
index 5681c5dafdf07580f262c54762dde8849a6b66f2..7509e6bb734f219a3e91b65cd0b7ce8c1c6a9891 100644
--- a/iBase4J-Biz-Web/pom.xml
+++ b/iBase4J-Biz-Web/pom.xml
@@ -25,17 +25,6 @@
-
- org.ibase4j
- iBase4J-Scheduler-API
- ${project.version}
-
-
- *
- *
-
-
-
org.ibase4j
iBase4J-SYS-API
diff --git a/iBase4J-Common/pom.xml b/iBase4J-Common/pom.xml
index 72aa92a608d27778ab60c9e21b431da832caa076..e2284770ddc54f6781886ef4804fe97c37d9270e 100644
--- a/iBase4J-Common/pom.xml
+++ b/iBase4J-Common/pom.xml
@@ -13,11 +13,23 @@
+
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
com.alibaba
druid
${druid.version}
+
+
+ org.quartz-scheduler
+ quartz
+ ${quartz.version}
+
org.mybatis
diff --git a/iBase4J-Common/src/main/java/org/ibase4j/core/base/BaseMapper.java b/iBase4J-Common/src/main/java/org/ibase4j/core/base/BaseMapper.java
index f7be1f9789d84242ff5d287b0f112f81a5fc176c..061d1f0152524ecc79ec9c6d84d521a72dcb9362 100644
--- a/iBase4J-Common/src/main/java/org/ibase4j/core/base/BaseMapper.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/base/BaseMapper.java
@@ -16,7 +16,7 @@ import org.apache.ibatis.session.RowBounds;
* @version 2016年6月3日 下午2:30:14
*/
-public interface BaseMapper extends com.baomidou.mybatisplus.mapper.BaseMapper {
+public interface BaseMapper extends com.baomidou.mybatisplus.mapper.BaseMapper {
List selectIdByMap(RowBounds rowBounds, @Param("cm") Map params);
}
diff --git a/iBase4J-Common/src/main/java/org/ibase4j/provider/scheduler/CoreTaskProvider.java b/iBase4J-Common/src/main/java/org/ibase4j/core/provider/scheduler/CoreTaskProvider.java
similarity index 59%
rename from iBase4J-Common/src/main/java/org/ibase4j/provider/scheduler/CoreTaskProvider.java
rename to iBase4J-Common/src/main/java/org/ibase4j/core/provider/scheduler/CoreTaskProvider.java
index 20112afd4dff59086b8867bc2a9187350ca4815b..e1a7f4422950d04a52b4edd511f00d2307cb69fd 100644
--- a/iBase4J-Common/src/main/java/org/ibase4j/provider/scheduler/CoreTaskProvider.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/provider/scheduler/CoreTaskProvider.java
@@ -1,4 +1,4 @@
-package org.ibase4j.provider.scheduler;
+package org.ibase4j.core.provider.scheduler;
public interface CoreTaskProvider {
void cleanExpiredSessions();
diff --git a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/provider/scheduler/SchedulerProvider.java b/iBase4J-Common/src/main/java/org/ibase4j/core/provider/scheduler/SchedulerProvider.java
similarity index 87%
rename from iBase4J-Scheduler-API/src/main/java/org/ibase4j/provider/scheduler/SchedulerProvider.java
rename to iBase4J-Common/src/main/java/org/ibase4j/core/provider/scheduler/SchedulerProvider.java
index e23f059f4b5a15a12b868c48b38d6e7bb35fca02..f60e8ba027ed733a270a4b891c4e47d204aa8649 100644
--- a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/provider/scheduler/SchedulerProvider.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/provider/scheduler/SchedulerProvider.java
@@ -1,7 +1,7 @@
/**
*
*/
-package org.ibase4j.provider.scheduler;
+package org.ibase4j.core.provider.scheduler;
import java.util.List;
import java.util.Map;
@@ -30,6 +30,9 @@ public interface SchedulerProvider {
/** 启停 */
public boolean openCloseTask(String taskGroup, String taskName, String status);
+
+ /** 删除作业 */
+ public boolean delTask(String taskGroup, String taskName);
public TaskGroup getGroupById(String id);
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/Constants.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/Constants.java
similarity index 86%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/Constants.java
rename to iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/Constants.java
index e2701528223ebcb8e371a41b30650aa8bce60065..68979a4b6b293916f2a2e5ed8a6ebd8c2b4a0ed7 100644
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/Constants.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/Constants.java
@@ -1,4 +1,4 @@
-package org.ibase4j.scheduler;
+package org.ibase4j.core.support.scheduler;
public class Constants {
/**
diff --git a/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/job/DubboJob.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/job/DubboJob.java
new file mode 100644
index 0000000000000000000000000000000000000000..c065f10d57e693dc6cfdbd732776f88c99ce0cb9
--- /dev/null
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/job/DubboJob.java
@@ -0,0 +1,43 @@
+package org.ibase4j.core.support.scheduler.job;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.ibase4j.core.support.dubbo.ReferenceUtil;
+import org.ibase4j.core.support.scheduler.Constants;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.JobKey;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * Dubbo调用远程作业
+ *
+ * @author ShenHuaJie
+ * @version 2016年5月27日 下午4:30:46
+ */
+public class DubboJob implements Job {
+ private Logger logger = LogManager.getLogger(this.getClass());
+ // 作业接口包名
+ private String provider = "org.ibase4j.provider.scheduler.";
+
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ long start = System.currentTimeMillis();
+ JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
+ if (Constants.ERROR_STATS.equals(jobDataMap.get("taskStatus"))) {
+ return;
+ }
+ ApplicationContext applicationContext = null;
+ JobKey jobKey = context.getJobDetail().getKey();
+ try {
+ applicationContext = (ApplicationContext)context.getScheduler().getContext().get("applicationContext");
+ Object refer = ReferenceUtil.refer(applicationContext, provider + jobKey.getGroup());
+ refer.getClass().getDeclaredMethod(jobKey.getName()).invoke(refer);
+ double time = (System.currentTimeMillis() - start) / 1000.0;
+ logger.info("用时:{}s", time);
+ } catch (Exception e) {
+ throw new JobExecutionException(e);
+ }
+ }
+}
diff --git a/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/job/LocalJob.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/job/LocalJob.java
new file mode 100644
index 0000000000000000000000000000000000000000..48c64cc33d4e9274203e6aaeabed2e1bc6f2e4e2
--- /dev/null
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/job/LocalJob.java
@@ -0,0 +1,40 @@
+package org.ibase4j.core.support.scheduler.job;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.ibase4j.core.support.scheduler.Constants;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.JobKey;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * 本地调用远程作业
+ *
+ * @author ShenHuaJie
+ * @version 2016年5月27日 下午4:30:46
+ */
+public class LocalJob implements Job {
+ private Logger logger = LogManager.getLogger(this.getClass());
+
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ long start = System.currentTimeMillis();
+ JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
+ if (Constants.ERROR_STATS.equals(jobDataMap.get("taskStatus"))) {
+ return;
+ }
+ JobKey jobKey = context.getJobDetail().getKey();
+ try {
+ ApplicationContext applicationContext = (ApplicationContext)context.getScheduler().getContext()
+ .get("applicationContext");
+ Object refer = applicationContext.getBean(jobKey.getGroup());
+ refer.getClass().getDeclaredMethod(jobKey.getName()).invoke(refer);
+ double time = (System.currentTimeMillis() - start) / 1000.0;
+ logger.info("用时:{}s", time);
+ } catch (Exception e) {
+ throw new JobExecutionException(e);
+ }
+ }
+}
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/TaskListener.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/JobListener.java
similarity index 81%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/TaskListener.java
rename to iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/JobListener.java
index 8059867b3b279fffe7a214c22eb2d6efa2f8814f..59c50923ebfe304c0f9fe476d7135eaeae719d88 100644
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/TaskListener.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/JobListener.java
@@ -1,4 +1,4 @@
-package org.ibase4j.scheduler.manager;
+package org.ibase4j.core.support.scheduler.manager;
import java.sql.Timestamp;
import java.util.concurrent.ExecutorService;
@@ -9,16 +9,14 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.ibase4j.core.support.email.Email;
import org.ibase4j.core.support.mq.QueueSender;
+import org.ibase4j.core.support.scheduler.Constants;
+import org.ibase4j.core.support.scheduler.service.SchedulerService;
import org.ibase4j.core.util.NativeUtil;
import org.ibase4j.model.scheduler.TaskFireLog;
-import org.ibase4j.model.scheduler.TaskScheduler;
-import org.ibase4j.scheduler.Constants;
-import org.ibase4j.service.SchedulerService;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
-import org.quartz.JobListener;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.fastjson.JSON;
@@ -29,7 +27,7 @@ import com.alibaba.fastjson.JSON;
* @author ShenHuaJie
* @version 2016年5月27日 下午4:31:31
*/
-public class TaskListener implements JobListener {
+public class JobListener implements org.quartz.JobListener {
private Logger logger = LogManager.getLogger(this.getClass());
@Autowired
private SchedulerService schedulerService;
@@ -53,7 +51,7 @@ public class TaskListener implements JobListener {
String groupName = jobKey.getGroup();
String jobName = jobKey.getName();
if (logger.isInfoEnabled()) {
- logger.info("Listened job : " + groupName + "." + jobName + " prepared to start.");
+ logger.info("定时任务开始执行:{}.{}", groupName, jobName);
}
if ("cleanExpiredSessions".equals(jobName)) {
return;
@@ -80,7 +78,7 @@ public class TaskListener implements JobListener {
String groupName = context.getJobDetail().getKey().getGroup();
String jobName = context.getJobDetail().getKey().getName();
if (logger.isInfoEnabled()) {
- logger.info("Listened job : " + groupName + "." + jobName + " executed.");
+ logger.info("定时任务执行结束:{}.{}", groupName, jobName);
}
// 更新任务执行状态
final TaskFireLog log = (TaskFireLog)jobDataMap.get(Constants.JOB_LOG);
@@ -109,11 +107,6 @@ public class TaskListener implements JobListener {
logger.error("Update TaskRunLog cause error. The log object is : " + JSON.toJSONString(log), e);
}
}
- // 更新任务执行时间
- TaskScheduler taskScheduler = schedulerService.getSchedulerById(jobDataMap.getString("id"));
- taskScheduler.setTaskPreviousFireTime(context.getFireTime());
- taskScheduler.setTaskNextFireTime(context.getNextFireTime());
- schedulerService.updateScheduler(taskScheduler);
}
});
}
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/SchedulerManager.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/SchedulerManager.java
similarity index 85%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/SchedulerManager.java
rename to iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/SchedulerManager.java
index b068d5e7565714212a3058ed5bcc5cdb16b9aaf0..8bd52fe0b5ec99f8eefbbc53a0eb02c366a26203 100644
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/SchedulerManager.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/SchedulerManager.java
@@ -1,4 +1,4 @@
-package org.ibase4j.scheduler.manager;
+package org.ibase4j.core.support.scheduler.manager;
import java.util.List;
@@ -29,6 +29,9 @@ public interface SchedulerManager {
/** 运行任务 */
public boolean runJob(TaskScheduled scheduleJob);
+
+ /** 删除任务 */
+ public boolean delJob(TaskScheduled scheduleJob);
/** 刷新调度(新增任务为暂停状态) */
public boolean refreshScheduler();
diff --git a/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/SchedulerManagerImpl.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/SchedulerManagerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..dc75aeeb68fcb25229d28841c6b4606e2dbcbe93
--- /dev/null
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/SchedulerManagerImpl.java
@@ -0,0 +1,335 @@
+package org.ibase4j.core.support.scheduler.manager;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.ibase4j.core.util.InstanceUtil;
+import org.ibase4j.model.scheduler.ext.TaskScheduled;
+import org.quartz.CronTrigger;
+import org.quartz.JobDetail;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobKey;
+import org.quartz.JobListener;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.Trigger;
+import org.quartz.impl.matchers.GroupMatcher;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ * 默认的定时任务管理器
+ *
+ * @author ShenHuaJie
+ * @version 2016年5月27日 上午10:28:26
+ */
+public class SchedulerManagerImpl implements SchedulerManager, InitializingBean {
+ private Logger logger = LogManager.getLogger(this.getClass());
+
+ private Scheduler scheduler;
+
+ private List triggerLoaders;
+
+ private List jobListeners;
+
+ public void setScheduler(Scheduler scheduler) {
+ this.scheduler = scheduler;
+ }
+
+ public void setTriggerLoaders(List triggerLoaders) {
+ this.triggerLoaders = triggerLoaders;
+ }
+
+ public void setJobListeners(List jobListeners) {
+ this.jobListeners = jobListeners;
+ }
+
+ // 调度初始化入口
+ public void afterPropertiesSet() throws Exception {
+ if (this.jobListeners != null && this.jobListeners.size() > 0) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Initing task scheduler[" + this.scheduler.getSchedulerName() + "] , add listener size :"
+ + this.jobListeners.size());
+ }
+ for (JobListener listener : this.jobListeners) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Add JobListener : " + listener.getName());
+ }
+ this.scheduler.getListenerManager().addJobListener(listener);
+ }
+ }
+
+ // 根据配置的初始化装载
+ if (this.triggerLoaders != null && this.triggerLoaders.size() > 0) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Initing task scheduler[" + this.scheduler.getSchedulerName() + "] , trigger loaders size :"
+ + this.triggerLoaders.size());
+ }
+ for (TriggerLoader loader : this.triggerLoaders) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Initing triggerLoader[" + loader.getClass().getName() + "].");
+ }
+ Map loadResultMap = loader.loadTriggers();
+ if (loadResultMap != null) {
+ for (Entry entry : loadResultMap.entrySet()) {
+ JobDetail oldJobDetail = null;
+ try {
+ oldJobDetail = this.scheduler.getJobDetail(entry.getValue().getKey());
+ } catch (Exception e) {
+ }
+ if (oldJobDetail == null) {
+ scheduler.scheduleJob(entry.getValue(), entry.getKey());
+ } else {
+ this.addJobDetail(entry.getValue());
+ this.updateTrigger(entry.getKey());
+ }
+ }
+ if (logger.isInfoEnabled()) {
+ logger.info("Initing triggerLoader[" + loader.getClass().getName() + "] end .");
+ }
+ } else {
+ logger.warn("No triggers loaded by triggerLoader[" + loader.getClass().getName() + "].");
+ }
+ }
+ } else {
+ logger.warn("No TriggerLoader for initing.");
+ }
+ }
+
+ private void addTrigger(Trigger trigger) {
+ Trigger oldTrigger = null;
+ try {
+ oldTrigger = scheduler.getTrigger(trigger.getKey());
+ } catch (Exception e) {
+ }
+ try {
+ if (oldTrigger == null) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Try to add trigger : " + trigger);
+ }
+ scheduler.scheduleJob(trigger);
+ if (!trigger.getJobDataMap().getBoolean("enable")) {
+ scheduler.pauseTrigger(trigger.getKey());
+ }
+ } else {
+ updateTrigger(trigger);
+ }
+ } catch (SchedulerException e) {
+ logger.error("Try to add trigger : " + trigger + " cause error : ", e);
+ }
+ }
+
+ private void updateTrigger(Trigger trigger) {
+ Trigger oldTrigger = null;
+ try {
+ oldTrigger = scheduler.getTrigger(trigger.getKey());
+ } catch (Exception e) {
+ }
+ try {
+ if (oldTrigger != null) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Try to update trigger : " + trigger);
+ }
+ scheduler.rescheduleJob(trigger.getKey(), trigger);
+ if (!trigger.getJobDataMap().getBoolean("enable")) {
+ scheduler.pauseTrigger(trigger.getKey());
+ }
+ } else {
+ logger.warn("Can't update trigger : " + trigger);
+ }
+ } catch (SchedulerException e) {
+ logger.error("Try to update trigger : " + trigger + ", the old trigger is : "
+ + (oldTrigger == null ? "null" : oldTrigger.toString()) + " cause error : ", e);
+ }
+ }
+
+ private void addJobDetail(JobDetail jobDetail) {
+ JobDetail oldJobDetail = null;
+ try {
+ oldJobDetail = this.scheduler.getJobDetail(jobDetail.getKey());
+ } catch (Exception e) {
+ }
+ try {
+ if (logger.isInfoEnabled()) {
+ logger.info("Try to add jobDetail : " + jobDetail);
+ }
+ this.scheduler.addJob(jobDetail, true);
+ } catch (Exception e) {
+ logger.error("Try to add jobDetail : " + jobDetail + ", the old jobDetail is : "
+ + (oldJobDetail == null ? "null" : oldJobDetail.toString()) + " cause error : ", e);
+ }
+ }
+
+ public List getAllJobDetail() {
+ List result = new LinkedList();
+ try {
+ GroupMatcher matcher = GroupMatcher.jobGroupContains("");
+ Set jobKeys = scheduler.getJobKeys(matcher);
+ for (JobKey jobKey : jobKeys) {
+ List extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
+ for (Trigger trigger : triggers) {
+ TaskScheduled job = new TaskScheduled();
+ job.setTaskName(jobKey.getName());
+ job.setTaskGroup(jobKey.getGroup());
+ Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
+ job.setStatus(triggerState.name());
+ if (trigger instanceof CronTrigger) {
+ CronTrigger cronTrigger = (CronTrigger)trigger;
+ String cronExpression = cronTrigger.getCronExpression();
+ job.setTaskCron(cronExpression);
+ }
+ job.setPreviousFireTime(trigger.getPreviousFireTime());
+ job.setNextFireTime(trigger.getNextFireTime());
+ job.setDesc(trigger.getJobDataMap().getString("desc"));
+ result.add(job);
+ }
+ }
+ } catch (Exception e) {
+ logger.error("Try to load All JobDetail cause error : ", e);
+ }
+ return result;
+ }
+
+ public JobDetail getJobDetailByTriggerName(Trigger trigger) {
+ try {
+ return this.scheduler.getJobDetail(trigger.getJobKey());
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ return null;
+ }
+
+ // 获取运行中任务
+ public List getRuningJobDetail() {
+ List jobList = null;
+ try {
+ List executingJobs = scheduler.getCurrentlyExecutingJobs();
+ jobList = new ArrayList(executingJobs.size());
+ for (JobExecutionContext executingJob : executingJobs) {
+ TaskScheduled job = new TaskScheduled();
+ JobDetail jobDetail = executingJob.getJobDetail();
+ JobKey jobKey = jobDetail.getKey();
+ Trigger trigger = executingJob.getTrigger();
+ job.setTaskName(jobKey.getName());
+ job.setTaskGroup(jobKey.getGroup());
+ Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
+ job.setStatus(triggerState.name());
+ if (trigger instanceof CronTrigger) {
+ CronTrigger cronTrigger = (CronTrigger)trigger;
+ String cronExpression = cronTrigger.getCronExpression();
+ job.setTaskCron(cronExpression);
+ }
+ job.setPreviousFireTime(trigger.getPreviousFireTime());
+ job.setNextFireTime(trigger.getNextFireTime());
+ job.setDesc(trigger.getJobDataMap().getString("desc"));
+ jobList.add(job);
+ }
+ } catch (Exception e) {
+ logger.error("Try to load running JobDetail cause error : ", e);
+ }
+ return jobList;
+ }
+
+ // 暂停任务
+ public boolean stopJob(TaskScheduled scheduleJob) {
+ try {
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getTaskName(), scheduleJob.getTaskGroup());
+ scheduler.pauseJob(jobKey);
+ return true;
+ } catch (Exception e) {
+ logger.error("Try to stop Job cause error : ", e);
+ }
+ return false;
+ }
+
+ // 启动任务
+ public boolean resumeJob(TaskScheduled scheduleJob) {
+ try {
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getTaskName(), scheduleJob.getTaskGroup());
+ scheduler.resumeJob(jobKey);
+ return true;
+ } catch (Exception e) {
+ logger.error("Try to resume Job cause error : ", e);
+ }
+ return false;
+ }
+
+ // 执行任务
+ public boolean runJob(TaskScheduled scheduleJob) {
+ try {
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getTaskName(), scheduleJob.getTaskGroup());
+ scheduler.triggerJob(jobKey);
+ return true;
+ } catch (Exception e) {
+ logger.error("Try to resume Job cause error : ", e);
+ }
+ return false;
+ }
+
+ // 删除任务
+ public boolean delJob(TaskScheduled scheduleJob) {
+ try {
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getTaskName(), scheduleJob.getTaskGroup());
+ scheduler.deleteJob(jobKey);
+ return true;
+ } catch (Exception e) {
+ logger.error("Try to resume Job cause error : ", e);
+ }
+ return false;
+ }
+
+ public boolean refreshScheduler() {
+ try {
+ // 根据配置的初始化装载
+ if (this.triggerLoaders != null && this.triggerLoaders.size() > 0) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Initing task scheduler[" + this.scheduler.getSchedulerName()
+ + "] , trigger loaders size :" + this.triggerLoaders.size());
+ }
+ // 获取原始调度状态
+ List scheduleJobs = getAllJobDetail();
+ Map stateMap = InstanceUtil.newHashMap();
+ for (TaskScheduled scheduleJob : scheduleJobs) {
+ stateMap.put(scheduleJob.getTaskGroup() + "." + scheduleJob.getTaskName(), scheduleJob.getStatus());
+ }
+ // 清空调度
+ scheduler.clear();
+ // 加载调度
+ for (TriggerLoader loader : this.triggerLoaders) {
+ if (logger.isInfoEnabled()) {
+ logger.info("Initing triggerLoader[" + loader.getClass().getName() + "].");
+ }
+ Map loadResultMap = loader.loadTriggers();
+ if (loadResultMap != null) {
+ for (Entry entry : loadResultMap.entrySet()) {
+ this.addJobDetail(entry.getValue());
+ this.addTrigger(entry.getKey());
+ JobKey jobKey = entry.getValue().getKey();
+ String key = jobKey.getGroup() + "." + jobKey.getName();
+ // 新增任务或原来为暂停状态
+ if ("PAUSED".equals(stateMap.get(key)) || !stateMap.containsKey(key)) {
+ scheduler.pauseJob(jobKey);
+ }
+ }
+ if (logger.isInfoEnabled()) {
+ logger.info("Initing triggerLoader[" + loader.getClass().getName() + "] end .");
+ }
+ } else {
+ logger.warn("No triggers loaded by triggerLoader[" + loader.getClass().getName() + "].");
+ }
+ }
+ } else {
+ logger.warn("No TriggerLoader for initing.");
+ }
+ return true;
+ } catch (Exception e) {
+ logger.error("Try to refresh scheduler cause error : ", e);
+ }
+ return false;
+ }
+}
diff --git a/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/TriggerLoader.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/TriggerLoader.java
new file mode 100644
index 0000000000000000000000000000000000000000..1036e982d3d3407e500fa341a2aa79a577b5ea8f
--- /dev/null
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/manager/TriggerLoader.java
@@ -0,0 +1,65 @@
+package org.ibase4j.core.support.scheduler.manager;
+
+import java.util.List;
+import java.util.Map;
+
+import org.ibase4j.core.provider.scheduler.SchedulerProvider;
+import org.ibase4j.core.util.InstanceUtil;
+import org.ibase4j.dao.scheduler.TaskSchedulerMapper;
+import org.ibase4j.model.scheduler.TaskGroup;
+import org.ibase4j.model.scheduler.TaskScheduler;
+import org.quartz.CronScheduleBuilder;
+import org.quartz.Job;
+import org.quartz.JobBuilder;
+import org.quartz.JobDataMap;
+import org.quartz.JobDetail;
+import org.quartz.Trigger;
+import org.quartz.TriggerBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 作业加载器
+ *
+ * @author ShenHueJie
+ * @version 2016年5月27日 下午4:31:52
+ */
+public class TriggerLoader {
+ @Autowired
+ private SchedulerProvider schedulerProvider;
+ @Autowired
+ private TaskSchedulerMapper taskSchedulerMapper;
+ // 执行作业的类
+ private Class extends Job> jobClass;
+
+ public TriggerLoader(Class extends Job> jobClass) {
+ this.jobClass = jobClass;
+ }
+
+ public Map loadTriggers() {
+ Map params = InstanceUtil.newHashMap();
+ String taskType = jobClass.getSimpleName().replace("Job", "").toLowerCase(); // 作业类型
+ params.put("taskType", taskType);
+ List taskSchedulerIds = taskSchedulerMapper.selectIdByMap(params);
+ Map resultMap = InstanceUtil.newHashMap();
+ for (String id : taskSchedulerIds) {
+ TaskScheduler taskScheduler = schedulerProvider.getSchedulerById(id);
+ TaskGroup taskGroup = schedulerProvider.getGroupById(taskScheduler.getGroupId());
+ JobDataMap jobDataMap = new JobDataMap();
+ jobDataMap.put("id", taskScheduler.getId());
+ jobDataMap.put("enable", taskScheduler.getEnable());
+ jobDataMap.put("contactEmail", taskScheduler.getContactEmail());
+ jobDataMap.put("desc", taskGroup.getGroupDesc() + ":" + taskScheduler.getTaskDesc());
+ JobDetail jobDetail = JobBuilder.newJob(jobClass)
+ .withIdentity(taskScheduler.getTaskName(), taskGroup.getGroupName())
+ .withDescription(taskScheduler.getTaskDesc()).storeDurably(true).usingJobData(jobDataMap).build();
+
+ Trigger trigger = TriggerBuilder.newTrigger()
+ .withSchedule(CronScheduleBuilder.cronSchedule(taskScheduler.getTaskCron()))
+ .withIdentity(taskScheduler.getTaskName(), taskGroup.getGroupName())
+ .withDescription(taskGroup.getGroupDesc()).forJob(jobDetail).usingJobData(jobDataMap).build();
+
+ resultMap.put(trigger, jobDetail);
+ }
+ return resultMap;
+ }
+}
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/provider/scheduler/SchedulerProviderImpl.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/provider/SchedulerProviderImpl.java
similarity index 68%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/provider/scheduler/SchedulerProviderImpl.java
rename to iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/provider/SchedulerProviderImpl.java
index e6e1e1fa99efb70b7c6fa5aa7c7b889039a9c942..6167213633ba2e209b7c0d45a0f9b97e167c1d9a 100644
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/provider/scheduler/SchedulerProviderImpl.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/provider/SchedulerProviderImpl.java
@@ -1,12 +1,11 @@
-package org.ibase4j.provider.scheduler;
+package org.ibase4j.core.support.scheduler.provider;
import java.util.List;
-import org.ibase4j.core.support.dubbo.spring.annotation.DubboService;
+import org.ibase4j.core.provider.scheduler.SchedulerProvider;
+import org.ibase4j.core.support.scheduler.manager.SchedulerManager;
+import org.ibase4j.core.support.scheduler.service.SchedulerService;
import org.ibase4j.model.scheduler.ext.TaskScheduled;
-import org.ibase4j.provider.scheduler.SchedulerProvider;
-import org.ibase4j.scheduler.manager.SchedulerManager;
-import org.ibase4j.service.SchedulerService;
import org.springframework.beans.factory.annotation.Autowired;
/**
@@ -15,7 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired;
* @author ShenHuaJie
* @version 2016年5月20日 下午3:19:59
*/
-@DubboService(interfaceClass = SchedulerProvider.class)
public class SchedulerProviderImpl extends SchedulerService implements SchedulerProvider {
@Autowired
private SchedulerManager schedulerManager;
@@ -45,4 +43,12 @@ public class SchedulerProviderImpl extends SchedulerService implements Scheduler
}
return false;
}
+
+ // 删除作业
+ public boolean delTask(String taskGroup, String taskName) {
+ TaskScheduled taskScheduler = new TaskScheduled();
+ taskScheduler.setTaskGroup(taskGroup);
+ taskScheduler.setTaskName(taskName);
+ return schedulerManager.delJob(taskScheduler);
+ }
}
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/service/SchedulerService.java b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/service/SchedulerService.java
similarity index 89%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/service/SchedulerService.java
rename to iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/service/SchedulerService.java
index 7da8433323296da675fe54bc3f91f33fd5122f0f..44b5216627dc90538ce9d5521d24abd27d218482 100644
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/service/SchedulerService.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/core/support/scheduler/service/SchedulerService.java
@@ -1,4 +1,4 @@
-package org.ibase4j.service;
+package org.ibase4j.core.support.scheduler.service;
import java.util.Date;
import java.util.List;
@@ -8,7 +8,6 @@ import org.apache.commons.lang3.StringUtils;
import org.ibase4j.core.base.BaseProviderImpl;
import org.ibase4j.core.util.InstanceUtil;
import org.ibase4j.dao.scheduler.TaskFireLogMapper;
-import org.ibase4j.dao.scheduler.TaskGroupMapper;
import org.ibase4j.dao.scheduler.TaskSchedulerMapper;
import org.ibase4j.model.scheduler.TaskFireLog;
import org.ibase4j.model.scheduler.TaskGroup;
@@ -17,7 +16,6 @@ import org.ibase4j.model.scheduler.ext.TaskSchedulerBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
-import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.plugins.Page;
@@ -26,10 +24,7 @@ import com.baomidou.mybatisplus.plugins.Page;
* @author ShenHuaJie
* @version 2016年7月1日 上午11:34:59
*/
-@Service
public class SchedulerService extends BaseProviderImpl {
- @Autowired
- private TaskGroupMapper taskGroupMapper;
@Autowired
private TaskSchedulerMapper taskSchedulerMapper;
@Autowired
@@ -37,7 +32,7 @@ public class SchedulerService extends BaseProviderImpl {
@Cacheable("taskGroup")
public TaskGroup getGroupById(String id) {
- return taskGroupMapper.selectById(id);
+ return mapper.selectById(id);
}
@Cacheable("taskScheduler")
@@ -57,10 +52,10 @@ public class SchedulerService extends BaseProviderImpl {
if (StringUtils.isBlank(record.getId())) {
record.setId(createId("TaskGroup"));
record.setCreateTime(new Date());
- taskGroupMapper.insert(record);
+ mapper.insert(record);
} else {
record.setUpdateTime(new Date());
- taskGroupMapper.updateById(record);
+ mapper.updateById(record);
}
return record;
}
@@ -94,7 +89,7 @@ public class SchedulerService extends BaseProviderImpl {
public Page queryGroup(Map params) {
Page ids = getPage(params);
- ids.setRecords(taskGroupMapper.selectIdByMap(ids, params));
+ ids.setRecords(mapper.selectIdByMap(ids, params));
Page page = new Page(ids.getCurrent(), ids.getSize());
page.setTotal(ids.getTotal());
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/dao/scheduler/TaskFireLogMapper.java b/iBase4J-Common/src/main/java/org/ibase4j/dao/scheduler/TaskFireLogMapper.java
similarity index 94%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/dao/scheduler/TaskFireLogMapper.java
rename to iBase4J-Common/src/main/java/org/ibase4j/dao/scheduler/TaskFireLogMapper.java
index 0cf7facbd7558bbfa430bf8c354b62d76d9d56ca..a403ecc22d9403d103dbfc7019da37b97628ffff 100644
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/dao/scheduler/TaskFireLogMapper.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/dao/scheduler/TaskFireLogMapper.java
@@ -9,6 +9,6 @@ import org.ibase4j.model.scheduler.TaskFireLog;
import com.baomidou.mybatisplus.mapper.BaseMapper;
-public interface TaskFireLogMapper extends BaseMapper {
+public interface TaskFireLogMapper extends BaseMapper {
List selectIdByMap(RowBounds rowBounds, @Param("cm") Map params);
}
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/dao/scheduler/TaskGroupMapper.java b/iBase4J-Common/src/main/java/org/ibase4j/dao/scheduler/TaskGroupMapper.java
similarity index 100%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/dao/scheduler/TaskGroupMapper.java
rename to iBase4J-Common/src/main/java/org/ibase4j/dao/scheduler/TaskGroupMapper.java
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/dao/scheduler/TaskSchedulerMapper.java b/iBase4J-Common/src/main/java/org/ibase4j/dao/scheduler/TaskSchedulerMapper.java
similarity index 100%
rename from iBase4J-Scheduler-Service/src/main/java/org/ibase4j/dao/scheduler/TaskSchedulerMapper.java
rename to iBase4J-Common/src/main/java/org/ibase4j/dao/scheduler/TaskSchedulerMapper.java
diff --git a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/TaskFireLog.java b/iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/TaskFireLog.java
similarity index 100%
rename from iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/TaskFireLog.java
rename to iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/TaskFireLog.java
diff --git a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/TaskGroup.java b/iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/TaskGroup.java
similarity index 100%
rename from iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/TaskGroup.java
rename to iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/TaskGroup.java
diff --git a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/TaskScheduler.java b/iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/TaskScheduler.java
similarity index 78%
rename from iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/TaskScheduler.java
rename to iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/TaskScheduler.java
index 5a260c0371dc578deae51fe74d3abacbda3c9438..4d99fb63c8cc210f4afa1a41db50084a6b9eaefa 100644
--- a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/TaskScheduler.java
+++ b/iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/TaskScheduler.java
@@ -1,7 +1,5 @@
package org.ibase4j.model.scheduler;
-import java.util.Date;
-
import org.ibase4j.core.base.BaseModel;
import com.baomidou.mybatisplus.annotations.TableName;
@@ -14,8 +12,6 @@ public class TaskScheduler extends BaseModel {
private String taskType;
private String taskDesc;
private String taskCron;
- private Date taskPreviousFireTime;
- private Date taskNextFireTime;
private String contactEmail;
/**
@@ -88,34 +84,6 @@ public class TaskScheduler extends BaseModel {
this.taskCron = taskCron == null ? null : taskCron.trim();
}
- /**
- * @return the value of task_scheduler.task_previous_fire_time
- */
- public Date getTaskPreviousFireTime() {
- return taskPreviousFireTime;
- }
-
- /**
- * @param taskPreviousFireTime the value for task_scheduler.task_previous_fire_time
- */
- public void setTaskPreviousFireTime(Date taskPreviousFireTime) {
- this.taskPreviousFireTime = taskPreviousFireTime;
- }
-
- /**
- * @return the value of task_scheduler.task_next_fire_time
- */
- public Date getTaskNextFireTime() {
- return taskNextFireTime;
- }
-
- /**
- * @param taskNextFireTime the value for task_scheduler.task_next_fire_time
- */
- public void setTaskNextFireTime(Date taskNextFireTime) {
- this.taskNextFireTime = taskNextFireTime;
- }
-
/**
* @return the value of task_scheduler.contact_email
*/
@@ -144,8 +112,6 @@ public class TaskScheduler extends BaseModel {
sb.append(", taskType=").append(taskType);
sb.append(", taskDesc=").append(taskDesc);
sb.append(", taskCron=").append(taskCron);
- sb.append(", taskPreviousFireTime=").append(taskPreviousFireTime);
- sb.append(", taskNextFireTime=").append(taskNextFireTime);
sb.append(", contactEmail=").append(contactEmail);
sb.append("]");
return sb.toString();
@@ -172,8 +138,6 @@ public class TaskScheduler extends BaseModel {
&& (this.getTaskType() == null ? other.getTaskType() == null : this.getTaskType().equals(other.getTaskType()))
&& (this.getTaskDesc() == null ? other.getTaskDesc() == null : this.getTaskDesc().equals(other.getTaskDesc()))
&& (this.getTaskCron() == null ? other.getTaskCron() == null : this.getTaskCron().equals(other.getTaskCron()))
- && (this.getTaskPreviousFireTime() == null ? other.getTaskPreviousFireTime() == null : this.getTaskPreviousFireTime().equals(other.getTaskPreviousFireTime()))
- && (this.getTaskNextFireTime() == null ? other.getTaskNextFireTime() == null : this.getTaskNextFireTime().equals(other.getTaskNextFireTime()))
&& (this.getContactEmail() == null ? other.getContactEmail() == null : this.getContactEmail().equals(other.getContactEmail()))
&& (this.getEnable() == null ? other.getEnable() == null : this.getEnable().equals(other.getEnable()))
&& (this.getCreateBy() == null ? other.getCreateBy() == null : this.getCreateBy().equals(other.getCreateBy()))
@@ -195,8 +159,6 @@ public class TaskScheduler extends BaseModel {
result = prime * result + ((getTaskType() == null) ? 0 : getTaskType().hashCode());
result = prime * result + ((getTaskDesc() == null) ? 0 : getTaskDesc().hashCode());
result = prime * result + ((getTaskCron() == null) ? 0 : getTaskCron().hashCode());
- result = prime * result + ((getTaskPreviousFireTime() == null) ? 0 : getTaskPreviousFireTime().hashCode());
- result = prime * result + ((getTaskNextFireTime() == null) ? 0 : getTaskNextFireTime().hashCode());
result = prime * result + ((getContactEmail() == null) ? 0 : getContactEmail().hashCode());
result = prime * result + ((getEnable() == null) ? 0 : getEnable().hashCode());
result = prime * result + ((getCreateBy() == null) ? 0 : getCreateBy().hashCode());
diff --git a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/ext/TaskScheduled.java b/iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/ext/TaskScheduled.java
similarity index 100%
rename from iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/ext/TaskScheduled.java
rename to iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/ext/TaskScheduled.java
diff --git a/iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/ext/TaskSchedulerBean.java b/iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/ext/TaskSchedulerBean.java
similarity index 100%
rename from iBase4J-Scheduler-API/src/main/java/org/ibase4j/model/scheduler/ext/TaskSchedulerBean.java
rename to iBase4J-Common/src/main/java/org/ibase4j/model/scheduler/ext/TaskSchedulerBean.java
diff --git a/iBase4J-Scheduler-Service/src/main/resources/config/quartz.properties b/iBase4J-Common/src/main/resources/config/quartz.properties
similarity index 100%
rename from iBase4J-Scheduler-Service/src/main/resources/config/quartz.properties
rename to iBase4J-Common/src/main/resources/config/quartz.properties
diff --git a/iBase4J-Scheduler-Service/src/main/resources/mappers/TaskFireLogMapper.xml b/iBase4J-Common/src/main/resources/mappers/TaskFireLogMapper.xml
similarity index 96%
rename from iBase4J-Scheduler-Service/src/main/resources/mappers/TaskFireLogMapper.xml
rename to iBase4J-Common/src/main/resources/mappers/TaskFireLogMapper.xml
index 050db606ac0d852a04454a2862f7b44ae3eff3b7..67c5e5195d0446b89ea945f228daa44870f4d332 100644
--- a/iBase4J-Scheduler-Service/src/main/resources/mappers/TaskFireLogMapper.xml
+++ b/iBase4J-Common/src/main/resources/mappers/TaskFireLogMapper.xml
@@ -1,6 +1,6 @@
-
+
+
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/src/main/resources/mappers/TaskGroupMapper.xml b/iBase4J-Common/src/main/resources/mappers/TaskGroupMapper.xml
similarity index 96%
rename from iBase4J-Scheduler-Service/src/main/resources/mappers/TaskGroupMapper.xml
rename to iBase4J-Common/src/main/resources/mappers/TaskGroupMapper.xml
index 48eb6095d21940838decd5e6c0a73abe6ba3de7e..e83670b9914ad0afc7d996fd87e1827765fe13eb 100644
--- a/iBase4J-Scheduler-Service/src/main/resources/mappers/TaskGroupMapper.xml
+++ b/iBase4J-Common/src/main/resources/mappers/TaskGroupMapper.xml
@@ -8,5 +8,5 @@
and (task_group like CONCAT('%',#{cm.keyword},'%') or group_desc like CONCAT('%',#{cm.keyword},'%'))
-
+
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/src/main/resources/mappers/TaskSchedulerMapper.xml b/iBase4J-Common/src/main/resources/mappers/TaskSchedulerMapper.xml
similarity index 96%
rename from iBase4J-Scheduler-Service/src/main/resources/mappers/TaskSchedulerMapper.xml
rename to iBase4J-Common/src/main/resources/mappers/TaskSchedulerMapper.xml
index 5d7c58ec19d2237d0d72afa33f1afaade76b8524..57bb4483f8e86c0b452b4f8b8f7e88178db55419 100644
--- a/iBase4J-Scheduler-Service/src/main/resources/mappers/TaskSchedulerMapper.xml
+++ b/iBase4J-Common/src/main/resources/mappers/TaskSchedulerMapper.xml
@@ -9,5 +9,5 @@
and (task_type like CONCAT('%',#{cm.keyword},'%') or task_desc like CONCAT('%',#{cm.keyword},'%'))
-
+
\ No newline at end of file
diff --git a/iBase4J-Common/src/main/resources/spring/mq.xml b/iBase4J-Common/src/main/resources/spring/mq.xml
index bce2cb8a1f358d4722d8e33220679e4de7f464db..b1b7ae9419722de1ffc6716c0147c0f1eac6e44c 100644
--- a/iBase4J-Common/src/main/resources/spring/mq.xml
+++ b/iBase4J-Common/src/main/resources/spring/mq.xml
@@ -33,4 +33,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/iBase4J-Common/src/main/resources/spring/mybatis.xml b/iBase4J-Common/src/main/resources/spring/mybatis.xml
index c0fa48ad960e599e196e39f2aa92991553b166c2..a08a93393c1d6f1849f01f8abbe9a3cd868294aa 100644
--- a/iBase4J-Common/src/main/resources/spring/mybatis.xml
+++ b/iBase4J-Common/src/main/resources/spring/mybatis.xml
@@ -16,7 +16,7 @@
-
+
diff --git a/iBase4J-Scheduler-Service/src/main/resources/spring/scheduler.xml b/iBase4J-Common/src/main/resources/spring/scheduler.xml
similarity index 53%
rename from iBase4J-Scheduler-Service/src/main/resources/spring/scheduler.xml
rename to iBase4J-Common/src/main/resources/spring/scheduler.xml
index 649cfc4e5e9cc90c222c1355b039b1392f788f18..16acf04536975850dcc881435b5ac1f37c6cfbce 100644
--- a/iBase4J-Scheduler-Service/src/main/resources/spring/scheduler.xml
+++ b/iBase4J-Common/src/main/resources/spring/scheduler.xml
@@ -2,8 +2,11 @@
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://code.alibabatech.com/schema/idubbo
+ http://code.alibabatech.com/schema/idubbo/idubbo.xsd">
@@ -14,20 +17,25 @@
-
+
-
+
+
-
+
+
+
+
\ No newline at end of file
diff --git a/iBase4J-SYS-Service/pom.xml b/iBase4J-SYS-Service/pom.xml
index 60c3d2589916495f58d3fe702e76744b6c564f2f..c0702168e3bd6da28c95778e9f307e124d909ff9 100644
--- a/iBase4J-SYS-Service/pom.xml
+++ b/iBase4J-SYS-Service/pom.xml
@@ -54,6 +54,12 @@
druid
${druid.version}
+
+
+ org.quartz-scheduler
+ quartz
+ ${quartz.version}
+
org.springframework
diff --git a/iBase4J-SYS-Service/src/main/java/org/ibase4j/provider/scheduler/CoreTaskService.java b/iBase4J-SYS-Service/src/main/java/org/ibase4j/provider/scheduler/CoreTaskProviderImpl.java
similarity index 75%
rename from iBase4J-SYS-Service/src/main/java/org/ibase4j/provider/scheduler/CoreTaskService.java
rename to iBase4J-SYS-Service/src/main/java/org/ibase4j/provider/scheduler/CoreTaskProviderImpl.java
index 1b46cc20102bb73092b8a9041a0d06bf77f6c168..0b76f3eee54744aafb8d8d7b1b55465872c689dc 100644
--- a/iBase4J-SYS-Service/src/main/java/org/ibase4j/provider/scheduler/CoreTaskService.java
+++ b/iBase4J-SYS-Service/src/main/java/org/ibase4j/provider/scheduler/CoreTaskProviderImpl.java
@@ -2,16 +2,17 @@ package org.ibase4j.provider.scheduler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.ibase4j.core.support.dubbo.spring.annotation.DubboService;
+import org.ibase4j.core.provider.scheduler.CoreTaskProvider;
import org.ibase4j.provider.sys.ISysSessionProvider;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
/**
* @author ShenHuaJie
* @version 2016年5月20日 下午3:19:19
*/
-@DubboService(interfaceClass = CoreTaskProvider.class)
-public class CoreTaskService implements CoreTaskProvider {
+@Service("coreTaskProvider")
+public class CoreTaskProviderImpl implements CoreTaskProvider {
private final Logger logger = LogManager.getLogger();
@Autowired
private ISysSessionProvider sessionProvider;
diff --git a/iBase4J-SYS-Service/src/main/resources/Spring-config.xml b/iBase4J-SYS-Service/src/main/resources/Spring-config.xml
index c9ac835fc31ee109d4f0dd3cade300e7841d65c6..ee706a5cabe5cb3a5c24580a3c76792489f47d0a 100644
--- a/iBase4J-SYS-Service/src/main/resources/Spring-config.xml
+++ b/iBase4J-SYS-Service/src/main/resources/Spring-config.xml
@@ -30,6 +30,7 @@
+
\ No newline at end of file
diff --git a/iBase4J-Scheduler-API/pom.xml b/iBase4J-Scheduler-API/pom.xml
deleted file mode 100644
index b770e81a49fbc44c793e8afab279b5287d5c1a62..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-API/pom.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- 4.0.0
- iBase4J-Scheduler-API
- iBase4J-Scheduler-API
- http://maven.apache.org
- jar
-
- org.ibase4j
- iBase4J
- 1.0.0
-
-
-
-
- org.ibase4j
- iBase4J-Common
- ${project.version}
-
-
- *
- *
-
-
-
-
-
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/pom.xml b/iBase4J-Scheduler-Service/pom.xml
deleted file mode 100644
index c7252fc5845f696cda102f9adb31256e139e150f..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/pom.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
- 4.0.0
-
- org.ibase4j
- iBase4J
- 1.0.0
-
- iBase4J-Scheduler-Service
- iBase4J-Scheduler-Service
- http://maven.apache.org
- war
-
-
- 8089
-
-
-
-
- org.ibase4j
- iBase4J-Common
- ${project.version}
-
-
- *
- *
-
-
-
-
- org.ibase4j
- iBase4J-Scheduler-API
- ${project.version}
-
-
- *
- *
-
-
-
-
-
- mysql
- mysql-connector-java
- ${mysql.version}
-
-
- com.alibaba
- druid
- ${druid.version}
-
-
-
- org.springframework
- spring-jdbc
- ${spring.version}
-
-
- org.springframework
- spring-oxm
- ${spring.version}
-
-
- org.springframework
- spring-tx
- ${spring.version}
-
-
- org.springframework
- spring-aop
- ${spring.version}
-
-
-
- org.quartz-scheduler
- quartz
- ${quartz.version}
-
-
-
- org.aspectj
- aspectjrt
- ${aspectj.version}
-
-
- org.aspectj
- aspectjweaver
- ${aspectj.version}
-
-
-
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/DefaultSchedulerManager.java b/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/DefaultSchedulerManager.java
deleted file mode 100644
index 54c9ce69bb158e35a87cfe158eaa572c1316d7b5..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/DefaultSchedulerManager.java
+++ /dev/null
@@ -1,339 +0,0 @@
-package org.ibase4j.scheduler.manager;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.ibase4j.core.util.InstanceUtil;
-import org.ibase4j.model.scheduler.ext.TaskScheduled;
-import org.quartz.CronTrigger;
-import org.quartz.JobDetail;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobKey;
-import org.quartz.JobListener;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
-import org.quartz.impl.matchers.GroupMatcher;
-import org.springframework.beans.factory.InitializingBean;
-
-/**
- * 默认的定时任务管理器
- *
- * @author ShenHuaJie
- * @version 2016年5月27日 上午10:28:26
- */
-public class DefaultSchedulerManager implements SchedulerManager, InitializingBean {
- private Logger logger = LogManager.getLogger(this.getClass());
-
- private Scheduler scheduler;
-
- private List triggerLoaders;
-
- private List jobListeners;
-
- public void setScheduler(Scheduler scheduler) {
- this.scheduler = scheduler;
- }
-
- public void setTriggerLoaders(List triggerLoaders) {
- this.triggerLoaders = triggerLoaders;
- }
-
- public void setJobListeners(List jobListeners) {
- this.jobListeners = jobListeners;
- }
-
- // 调度初始化入口
- public void afterPropertiesSet() throws Exception {
- if (this.jobListeners != null && this.jobListeners.size() > 0) {
- if (logger.isInfoEnabled()) {
- logger.info("Initing task scheduler[" + this.scheduler.getSchedulerName() + "] , add listener size :"
- + this.jobListeners.size());
- }
- for (JobListener listener : this.jobListeners) {
- if (logger.isInfoEnabled()) {
- logger.info("Add JobListener : " + listener.getName());
- }
- this.scheduler.getListenerManager().addJobListener(listener);
- }
- }
-
- // 根据配置的初始化装载
- if (this.triggerLoaders != null && this.triggerLoaders.size() > 0) {
- if (logger.isInfoEnabled()) {
- logger.info("Initing task scheduler[" + this.scheduler.getSchedulerName() + "] , trigger loaders size :"
- + this.triggerLoaders.size());
- }
- for (TriggerLoader loader : this.triggerLoaders) {
- if (logger.isInfoEnabled()) {
- logger.info("Initing triggerLoader[" + loader.getClass().getName() + "].");
- }
- Map loadResultMap = loader.loadTriggers();
- if (loadResultMap != null) {
- for (Entry entry : loadResultMap.entrySet()) {
- this.addJobDetail(entry.getValue());
- this.addTrigger(entry.getKey());
- }
- if (logger.isInfoEnabled()) {
- logger.info("Initing triggerLoader[" + loader.getClass().getName() + "] end .");
- }
- } else {
- logger.warn("No triggers loaded by triggerLoader[" + loader.getClass().getName() + "].");
- }
- }
- } else {
- logger.warn("No TriggerLoader for initing.");
- }
- }
-
- private void addTrigger(Trigger trigger) {
- Trigger oldTrigger = null;
- try {
- oldTrigger = scheduler.getTrigger(trigger.getKey());
- } catch (Exception e) {
- }
- try {
- if (oldTrigger == null) {
- if (logger.isInfoEnabled()) {
- logger.info("Try to add trigger : " + trigger);
- }
- scheduler.scheduleJob(trigger);
- if (!trigger.getJobDataMap().getBoolean("enable")) {
- scheduler.pauseTrigger(trigger.getKey());
- }
- } else {
- updateTrigger(trigger);
- }
- } catch (SchedulerException e) {
- logger.error("Try to add trigger : " + trigger + " cause error : ", e);
- }
- }
-
- private void updateTrigger(Trigger trigger) {
- Trigger oldTrigger = null;
- try {
- oldTrigger = scheduler.getTrigger(trigger.getKey());
- } catch (Exception e) {
- }
- try {
- if (oldTrigger != null) {
- if (logger.isInfoEnabled()) {
- logger.info("Try to update trigger : " + trigger);
- }
- scheduler.rescheduleJob(trigger.getKey(), trigger);
- if (!trigger.getJobDataMap().getBoolean("enable")) {
- scheduler.pauseTrigger(trigger.getKey());
- }
- } else {
- logger.warn("Can't update trigger : " + trigger);
- }
- } catch (SchedulerException e) {
- logger.error("Try to update trigger : " + trigger + ", the old trigger is : "
- + (oldTrigger == null ? "null" : oldTrigger.toString()) + " cause error : ", e);
- }
- }
-
- private void addJobDetail(JobDetail jobDetail) {
- JobDetail oldJobDetail = null;
- try {
- oldJobDetail = this.scheduler.getJobDetail(jobDetail.getKey());
- } catch (Exception e) {
- }
- try {
- if (oldJobDetail == null) {
- if (logger.isInfoEnabled()) {
- logger.info("Try to add jobDetail : " + jobDetail);
- }
- this.scheduler.addJob(jobDetail, true);
- } else {
- updateJobDetail(jobDetail);
- }
- } catch (Exception e) {
- logger.error("Try to add jobDetail : " + jobDetail + ", the old jobDetail is : "
- + (oldJobDetail == null ? "null" : oldJobDetail.toString()) + " cause error : ", e);
- }
- }
-
- private void updateJobDetail(JobDetail jobDetail) {
- JobDetail oldJobDetail = null;
- try {
- oldJobDetail = this.scheduler.getJobDetail(jobDetail.getKey());
- } catch (Exception e) {
- }
- try {
- if (oldJobDetail != null) {
- if (logger.isInfoEnabled()) {
- logger.info("Try to update oldJobDetail : " + oldJobDetail);
- }
- this.scheduler.addJob(jobDetail, true);
- } else {
- logger.warn("Can't update JobDetail : " + jobDetail);
- }
- } catch (SchedulerException e) {
- logger.error("Try to update JobDetail : " + jobDetail + ", the old JobDetail is : "
- + (oldJobDetail == null ? "null" : oldJobDetail.toString()) + " cause error : ", e);
- }
- }
-
- public List getAllJobDetail() {
- List result = new LinkedList();
- try {
- GroupMatcher matcher = GroupMatcher.jobGroupContains("");
- Set jobKeys = scheduler.getJobKeys(matcher);
- for (JobKey jobKey : jobKeys) {
- List extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
- for (Trigger trigger : triggers) {
- TaskScheduled job = new TaskScheduled();
- job.setTaskName(jobKey.getName());
- job.setTaskGroup(jobKey.getGroup());
- Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
- job.setStatus(triggerState.name());
- if (trigger instanceof CronTrigger) {
- CronTrigger cronTrigger = (CronTrigger) trigger;
- String cronExpression = cronTrigger.getCronExpression();
- job.setTaskCron(cronExpression);
- }
- job.setPreviousFireTime(trigger.getPreviousFireTime());
- job.setNextFireTime(trigger.getNextFireTime());
- job.setDesc(trigger.getJobDataMap().getString("desc"));
- result.add(job);
- }
- }
- } catch (Exception e) {
- logger.error("Try to load All JobDetail cause error : ", e);
- }
- return result;
- }
-
- public JobDetail getJobDetailByTriggerName(Trigger trigger) {
- try {
- return this.scheduler.getJobDetail(trigger.getJobKey());
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- return null;
- }
-
- // 获取运行中任务
- public List getRuningJobDetail() {
- List jobList = null;
- try {
- List executingJobs = scheduler.getCurrentlyExecutingJobs();
- jobList = new ArrayList(executingJobs.size());
- for (JobExecutionContext executingJob : executingJobs) {
- TaskScheduled job = new TaskScheduled();
- JobDetail jobDetail = executingJob.getJobDetail();
- JobKey jobKey = jobDetail.getKey();
- Trigger trigger = executingJob.getTrigger();
- job.setTaskName(jobKey.getName());
- job.setTaskGroup(jobKey.getGroup());
- Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
- job.setStatus(triggerState.name());
- if (trigger instanceof CronTrigger) {
- CronTrigger cronTrigger = (CronTrigger) trigger;
- String cronExpression = cronTrigger.getCronExpression();
- job.setTaskCron(cronExpression);
- }
- job.setPreviousFireTime(trigger.getPreviousFireTime());
- job.setNextFireTime(trigger.getNextFireTime());
- job.setDesc(trigger.getJobDataMap().getString("desc"));
- jobList.add(job);
- }
- } catch (Exception e) {
- logger.error("Try to load running JobDetail cause error : ", e);
- }
- return jobList;
- }
-
- // 暂停任务
- public boolean stopJob(TaskScheduled scheduleJob) {
- try {
- JobKey jobKey = JobKey.jobKey(scheduleJob.getTaskName(), scheduleJob.getTaskGroup());
- scheduler.pauseJob(jobKey);
- return true;
- } catch (Exception e) {
- logger.error("Try to stop Job cause error : ", e);
- }
- return false;
- }
-
- // 启动任务
- public boolean resumeJob(TaskScheduled scheduleJob) {
- try {
- JobKey jobKey = JobKey.jobKey(scheduleJob.getTaskName(), scheduleJob.getTaskGroup());
- scheduler.resumeJob(jobKey);
- return true;
- } catch (Exception e) {
- logger.error("Try to resume Job cause error : ", e);
- }
- return false;
- }
-
- // 执行任务
- public boolean runJob(TaskScheduled scheduleJob) {
- try {
- JobKey jobKey = JobKey.jobKey(scheduleJob.getTaskName(), scheduleJob.getTaskGroup());
- scheduler.triggerJob(jobKey);
- return true;
- } catch (Exception e) {
- logger.error("Try to resume Job cause error : ", e);
- }
- return false;
- }
-
- public boolean refreshScheduler() {
- try {
- // 根据配置的初始化装载
- if (this.triggerLoaders != null && this.triggerLoaders.size() > 0) {
- if (logger.isInfoEnabled()) {
- logger.info("Initing task scheduler[" + this.scheduler.getSchedulerName()
- + "] , trigger loaders size :" + this.triggerLoaders.size());
- }
- // 获取原始调度状态
- List scheduleJobs = getAllJobDetail();
- Map stateMap = InstanceUtil.newHashMap();
- for (TaskScheduled scheduleJob : scheduleJobs) {
- stateMap.put(scheduleJob.getTaskGroup() + "." + scheduleJob.getTaskName(), scheduleJob.getStatus());
- }
- // 清空调度
- scheduler.clear();
- // 加载调度
- for (TriggerLoader loader : this.triggerLoaders) {
- if (logger.isInfoEnabled()) {
- logger.info("Initing triggerLoader[" + loader.getClass().getName() + "].");
- }
- Map loadResultMap = loader.loadTriggers();
- if (loadResultMap != null) {
- for (Entry entry : loadResultMap.entrySet()) {
- this.addJobDetail(entry.getValue());
- this.addTrigger(entry.getKey());
- JobKey jobKey = entry.getValue().getKey();
- String key = jobKey.getGroup() + "." + jobKey.getName();
- // 新增任务或原来为暂停状态
- if ("PAUSED".equals(stateMap.get(key)) || !stateMap.containsKey(key)) {
- scheduler.pauseJob(jobKey);
- }
- }
- if (logger.isInfoEnabled()) {
- logger.info("Initing triggerLoader[" + loader.getClass().getName() + "] end .");
- }
- } else {
- logger.warn("No triggers loaded by triggerLoader[" + loader.getClass().getName() + "].");
- }
- }
- } else {
- logger.warn("No TriggerLoader for initing.");
- }
- return true;
- } catch (Exception e) {
- logger.error("Try to refresh scheduler cause error : ", e);
- }
- return false;
- }
-}
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/TriggerLoader.java b/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/TriggerLoader.java
deleted file mode 100644
index 450c1fec078c8effb10db43b9c8fb2158bf41673..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/manager/TriggerLoader.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.ibase4j.scheduler.manager;
-
-import java.util.List;
-import java.util.Map;
-
-import org.ibase4j.core.util.InstanceUtil;
-import org.ibase4j.dao.scheduler.TaskSchedulerMapper;
-import org.ibase4j.model.scheduler.TaskGroup;
-import org.ibase4j.model.scheduler.TaskScheduler;
-import org.ibase4j.service.SchedulerService;
-import org.quartz.CronScheduleBuilder;
-import org.quartz.Job;
-import org.quartz.JobBuilder;
-import org.quartz.JobDataMap;
-import org.quartz.JobDetail;
-import org.quartz.Trigger;
-import org.quartz.TriggerBuilder;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 作业加载器
- *
- * @author ShenHueJie
- * @version 2016年5月27日 下午4:31:52
- */
-public class TriggerLoader {
- @Autowired
- private SchedulerService schedulerService;
- @Autowired
- private TaskSchedulerMapper taskSchedulerMapper;
-
- private String taskType; // 作业类型
- private Class extends Job> jobClass; // 执行作业的类
-
- public TriggerLoader(String taskType, Class extends Job> jobClass) {
- this.taskType = taskType;
- this.jobClass = jobClass;
- }
-
- public Map loadTriggers() {
- Map params = InstanceUtil.newHashMap();
- params.put("taskType", taskType);
- List taskSchedulerIds = taskSchedulerMapper.selectIdByMap(params);
- Map resultMap = InstanceUtil.newHashMap();
- for (String id : taskSchedulerIds) {
- TaskScheduler taskScheduler = schedulerService.getSchedulerById(id);
- TaskGroup taskGroup = schedulerService.getGroupById(taskScheduler.getGroupId());
- JobDataMap jobDataMap = new JobDataMap();
- jobDataMap.put("id", taskScheduler.getId());
- jobDataMap.put("enable", taskScheduler.getEnable());
- jobDataMap.put("contactEmail", taskScheduler.getContactEmail());
- jobDataMap.put("desc", taskGroup.getGroupDesc() + ":" + taskScheduler.getTaskDesc());
- JobDetail jobDetail = JobBuilder.newJob(jobClass)
- .withIdentity(taskScheduler.getTaskName(), taskGroup.getGroupName())
- .withDescription(taskScheduler.getTaskDesc()).storeDurably(true).usingJobData(jobDataMap).build();
-
- Trigger trigger = TriggerBuilder.newTrigger()
- .withSchedule(CronScheduleBuilder.cronSchedule(taskScheduler.getTaskCron()))
- .withIdentity(taskScheduler.getTaskName(), taskGroup.getGroupName())
- .withDescription(taskGroup.getGroupDesc()).forJob(jobDetail).usingJobData(jobDataMap).build();
-
- resultMap.put(trigger, jobDetail);
- }
- return resultMap;
- }
-}
diff --git a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/task/DubboTask.java b/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/task/DubboTask.java
deleted file mode 100644
index 836f536b4f78ce36b9d3289e5f45b0150ad24588..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/java/org/ibase4j/scheduler/task/DubboTask.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.ibase4j.scheduler.task;
-
-import org.ibase4j.core.support.dubbo.ReferenceUtil;
-import org.ibase4j.scheduler.Constants;
-import org.quartz.Job;
-import org.quartz.JobDataMap;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.quartz.JobKey;
-import org.springframework.context.ApplicationContext;
-
-/**
- * Dubbo调用远程作业
- *
- * @author ShenHuaJie
- * @version 2016年5月27日 下午4:30:46
- */
-public class DubboTask implements Job {
- // 作业接口包名
- private String provider = "org.ibase4j.provider.scheduler.";
-
- public void execute(JobExecutionContext context) throws JobExecutionException {
- JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
- if (Constants.ERROR_STATS.equals(jobDataMap.get("taskStatus"))) {
- return;
- }
- ApplicationContext applicationContext = null;
- JobKey jobKey = context.getJobDetail().getKey();
- try {
- applicationContext = (ApplicationContext) context.getScheduler().getContext().get("applicationContext");
- Object refer = ReferenceUtil.refer(applicationContext, provider + jobKey.getGroup());
- refer.getClass().getDeclaredMethod(jobKey.getName()).invoke(refer);
- } catch (Exception e) {
- throw new JobExecutionException(e);
- }
- }
-
-}
diff --git a/iBase4J-Scheduler-Service/src/main/resources/Spring-config.xml b/iBase4J-Scheduler-Service/src/main/resources/Spring-config.xml
deleted file mode 100644
index f504ddd543d6abdee993b990198a1aa53dc7e1d6..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/resources/Spring-config.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
- ${scheduler.jdbc.config.path}
- ${system.config.path}
-
-
-
-
-
- ${project.artifactId}
- 1${server.port}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/src/main/resources/config/jdbc.properties b/iBase4J-Scheduler-Service/src/main/resources/config/jdbc.properties
deleted file mode 100644
index 26b852f6b6f90072122f7d1317905c2d9b82e532..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/resources/config/jdbc.properties
+++ /dev/null
@@ -1,29 +0,0 @@
-db.driver=com.mysql.jdbc.Driver
-#\u8bfb
-db.reader.url=jdbc:mysql://127.0.0.1:3306/ibase4j\u003fuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
-db.reader.username=root
-#\u56de\u8c03DBPasswordCallback\u89e3\u5bc6
-db.reader.password=buzhidao
-#\u5199
-db.writer.url=jdbc:mysql://127.0.0.1:3306/ibase4j\u003fuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=PRC&useSSL=false
-db.writer.username=root
-#\u56de\u8c03DBPasswordCallback\u89e3\u5bc6
-db.writer.password=buzhidao
-#\u5b9a\u4e49\u521d\u59cb\u8fde\u63a5\u6570
-db.initialSize=20
-#\u5b9a\u4e49\u6700\u5927\u8fde\u63a5\u6570
-db.maxActive=40
-#\u5b9a\u4e49\u6700\u5927\u7a7a\u95f2
-db.maxIdle=20
-#\u5b9a\u4e49\u6700\u5c0f\u7a7a\u95f2
-db.minIdle=1
-#\u5b9a\u4e49\u6700\u957f\u7b49\u5f85\u65f6\u95f4
-db.maxWait=60000
-#
-db.timeBetweenEvictionRunsMillis=3000
-#
-db.minEvictableIdleTimeMillis=300000
-#
-db.maxPoolPreparedStatementPerConnectionSize=20
-#
-druid.filters=
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/src/main/resources/log4j2.xml b/iBase4J-Scheduler-Service/src/main/resources/log4j2.xml
deleted file mode 100644
index cfdca01a19a3ac35b15a995a8ae9a72bed0b8dbf..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/resources/log4j2.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
- \output\logs
-
- backup
- ${project.artifactId}
- 5M
- DEBUG
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/src/main/resources/spring/mq-listener.xml b/iBase4J-Scheduler-Service/src/main/resources/spring/mq-listener.xml
deleted file mode 100644
index 5b66eebec7bcc2bfa49ef4289de90643a7cb1193..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/resources/spring/mq-listener.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/iBase4J-Scheduler-Service/src/main/webapp/META-INF/context.xml b/iBase4J-Scheduler-Service/src/main/webapp/META-INF/context.xml
deleted file mode 100644
index fc7145d30c8e94beaa0321d37b4b09ba3101bf8d..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/webapp/META-INF/context.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/iBase4J-Scheduler-Service/src/main/webapp/WEB-INF/web.xml b/iBase4J-Scheduler-Service/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index e9cd1ddc483b60824cc0a3ed013decf25102a0f2..0000000000000000000000000000000000000000
--- a/iBase4J-Scheduler-Service/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
- iBase4J-Scheduler-Service
-
- webAppRootKey
- iBase4J-Scheduler-Service
-
-
- contextConfigLocation
- classpath:Spring-config.xml
-
-
- DruidStatView
- com.alibaba.druid.support.http.StatViewServlet
-
-
- allow
- 127.0.0.1,localhost
-
-
-
- loginUsername
- druid
-
-
-
- loginPassword
- druid
-
-
-
- DruidStatView
- /druid/*
-
-
- org.springframework.web.context.ContextLoaderListener
-
-
- org.springframework.web.util.IntrospectorCleanupListener
-
-
- org.ibase4j.core.listener.ServerListerner
-
-
\ No newline at end of file
diff --git a/iBase4J-Web/pom.xml b/iBase4J-Web/pom.xml
index 412a49813c60b804a72e2ae37ef248fe3d7807bf..2b813dce5b7548d31338c4a743e32f3d460345b9 100644
--- a/iBase4J-Web/pom.xml
+++ b/iBase4J-Web/pom.xml
@@ -29,17 +29,6 @@
-
- org.ibase4j
- iBase4J-Scheduler-API
- ${project.version}
-
-
- *
- *
-
-
-
org.ibase4j
iBase4J-SYS-API
diff --git a/iBase4J-Web/src/main/java/org/ibase4j/service/scheduler/SchedulerService.java b/iBase4J-Web/src/main/java/org/ibase4j/service/scheduler/SchedulerService.java
index cdbee5ec49f340c22b6ed6d45eeb871c5da59681..e8c279b90b24ca020559c6aa4f855e57644d1ab2 100644
--- a/iBase4J-Web/src/main/java/org/ibase4j/service/scheduler/SchedulerService.java
+++ b/iBase4J-Web/src/main/java/org/ibase4j/service/scheduler/SchedulerService.java
@@ -3,6 +3,7 @@ package org.ibase4j.service.scheduler;
import java.util.List;
import java.util.Map;
+import org.ibase4j.core.provider.scheduler.SchedulerProvider;
import org.ibase4j.core.support.Assert;
import org.ibase4j.core.support.dubbo.spring.annotation.DubboReference;
import org.ibase4j.model.scheduler.TaskFireLog;
@@ -10,7 +11,6 @@ import org.ibase4j.model.scheduler.TaskGroup;
import org.ibase4j.model.scheduler.TaskScheduler;
import org.ibase4j.model.scheduler.ext.TaskScheduled;
import org.ibase4j.model.scheduler.ext.TaskSchedulerBean;
-import org.ibase4j.provider.scheduler.SchedulerProvider;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.plugins.Page;
@@ -50,6 +50,12 @@ public class SchedulerService {
return schedulerProvider.openCloseTask(taskGroup, taskName, "stop");
}
+ public boolean delTask(String taskGroup, String taskName) {
+ Assert.notNull(taskGroup, "TASKGROUP");
+ Assert.notNull(taskName, "TASKNAME");
+ return schedulerProvider.delTask(taskGroup, taskName);
+ }
+
public Page queryGroup(Map params) {
return schedulerProvider.queryGroup(params);
}
diff --git a/iBase4J-Web/src/main/java/org/ibase4j/web/scheduler/ScheduledController.java b/iBase4J-Web/src/main/java/org/ibase4j/web/scheduler/ScheduledController.java
index b302e93194ad8430f0030c794955974b9a32647e..ad025162a6c429ba7b33302275f4d2a1acb9b57e 100644
--- a/iBase4J-Web/src/main/java/org/ibase4j/web/scheduler/ScheduledController.java
+++ b/iBase4J-Web/src/main/java/org/ibase4j/web/scheduler/ScheduledController.java
@@ -34,54 +34,64 @@ import io.swagger.annotations.ApiOperation;
@Api(value = "调度管理", description = "调度管理")
@RequestMapping(value = "/scheduled", method = RequestMethod.POST)
public class ScheduledController extends BaseController {
- @Autowired
- private SchedulerService schedulerService;
+ @Autowired
+ private SchedulerService schedulerService;
- @RequestMapping("/read/tasks")
- @ApiOperation(value = "调度列表")
- @RequiresPermissions("task.scheduled.read")
- public Object list(ModelMap modelMap) {
- Page jobs = schedulerService.getAllTaskDetail();
- return setSuccessModelMap(modelMap, jobs);
- }
+ @RequestMapping("/read/tasks")
+ @ApiOperation(value = "调度列表")
+ @RequiresPermissions("task.scheduled.read")
+ public Object list(ModelMap modelMap) {
+ Page jobs = schedulerService.getAllTaskDetail();
+ return setSuccessModelMap(modelMap, jobs);
+ }
- // 执行
- @RequestMapping("/run/task")
- @ApiOperation(value = "立即执行调度")
- @RequiresPermissions("task.scheduled.run")
- public Object exec(ModelMap modelMap, @RequestParam(value = "taskGroup", required = false) String taskGroup,
- @RequestParam(value = "taskName", required = false) String taskName) {
- schedulerService.execTask(taskGroup, taskName);
- return setSuccessModelMap(modelMap);
- }
+ // 执行
+ @RequestMapping("/run/task")
+ @ApiOperation(value = "立即执行调度")
+ @RequiresPermissions("task.scheduled.run")
+ public Object exec(ModelMap modelMap, @RequestParam(value = "taskGroup", required = true) String taskGroup,
+ @RequestParam(value = "taskName", required = true) String taskName) {
+ schedulerService.execTask(taskGroup, taskName);
+ return setSuccessModelMap(modelMap);
+ }
- // 启动
- @RequestMapping("/open/task")
- @ApiOperation(value = "启动调度")
- @RequiresPermissions("task.scheduled.open")
- public Object open(ModelMap modelMap, @RequestParam(value = "taskGroup", required = false) String taskGroup,
- @RequestParam(value = "taskName", required = false) String taskName) {
- schedulerService.openTask(taskGroup, taskName);
- return setSuccessModelMap(modelMap);
- }
+ // 启动
+ @RequestMapping("/open/task")
+ @ApiOperation(value = "启动调度")
+ @RequiresPermissions("task.scheduled.open")
+ public Object open(ModelMap modelMap, @RequestParam(value = "taskGroup", required = true) String taskGroup,
+ @RequestParam(value = "taskName", required = true) String taskName) {
+ schedulerService.openTask(taskGroup, taskName);
+ return setSuccessModelMap(modelMap);
+ }
- // 暂停
- @RequestMapping("/close/task")
- @ApiOperation(value = "暂停调度")
- @RequiresPermissions("task.scheduled.close")
- public Object close(ModelMap modelMap, @RequestParam(value = "taskGroup", required = false) String taskGroup,
- @RequestParam(value = "taskName", required = false) String taskName) {
- schedulerService.closeTask(taskGroup, taskName);
- return setSuccessModelMap(modelMap);
- }
+ // 暂停
+ @RequestMapping("/close/task")
+ @ApiOperation(value = "暂停调度")
+ @RequiresPermissions("task.scheduled.close")
+ public Object close(ModelMap modelMap, @RequestParam(value = "taskGroup", required = true) String taskGroup,
+ @RequestParam(value = "taskName", required = true) String taskName) {
+ schedulerService.closeTask(taskGroup, taskName);
+ return setSuccessModelMap(modelMap);
+ }
- // 执行记录
- @RequestMapping("/read/log")
- @ApiOperation(value = "调度执行记录")
- @RequiresPermissions("task.log.read")
- public Object getFireLog(HttpServletRequest request, ModelMap modelMap) {
- Map params = WebUtil.getParameterMap(request);
- Page> list = schedulerService.queryLog(params);
- return setSuccessModelMap(modelMap, list);
- }
+ // 暂停
+ @RequestMapping("/del/task")
+ @ApiOperation(value = "暂停调度")
+ @RequiresPermissions("task.scheduled.close")
+ public Object delete(ModelMap modelMap, @RequestParam(value = "taskGroup", required = true) String taskGroup,
+ @RequestParam(value = "taskName", required = true) String taskName) {
+ schedulerService.delTask(taskGroup, taskName);
+ return setSuccessModelMap(modelMap);
+ }
+
+ // 执行记录
+ @RequestMapping("/read/log")
+ @ApiOperation(value = "调度执行记录")
+ @RequiresPermissions("task.log.read")
+ public Object getFireLog(HttpServletRequest request, ModelMap modelMap) {
+ Map params = WebUtil.getParameterMap(request);
+ Page> list = schedulerService.queryLog(params);
+ return setSuccessModelMap(modelMap, list);
+ }
}
diff --git a/iBase4J.sql b/iBase4J.sql
index 8352e5957a2cae2cb9ce68ab3b5bb3be2a3b2115..23a7209e7dd8ae06fc34c4450060fd8b3d1a169f 100644
--- a/iBase4J.sql
+++ b/iBase4J.sql
@@ -685,7 +685,7 @@ CREATE TABLE IF NOT EXISTS `task_group` (
-- 正在导出表 ibase4j.task_group 的数据:~0 rows (大约)
/*!40000 ALTER TABLE `task_group` DISABLE KEYS */;
INSERT INTO `task_group` (`id_`, `group_name`, `group_desc`, `remark_`, `enable_`, `create_time`, `create_by`, `update_time`, `update_by`) VALUES
- ('1', 'CoreTaskProvider', '系统管理', '', 1, '2016-05-27 14:56:51', '1', '2016-06-16 10:18:58', '1');
+ ('1', 'coreTaskProvider', '系统管理', '', 1, '2016-05-27 14:56:51', '1', '2016-06-16 10:18:58', '1');
/*!40000 ALTER TABLE `task_group` ENABLE KEYS */;
@@ -698,8 +698,6 @@ CREATE TABLE IF NOT EXISTS `task_scheduler` (
`task_type` varchar(50) NOT NULL,
`task_desc` varchar(50) DEFAULT NULL,
`task_cron` varchar(50) NOT NULL,
- `task_previous_fire_time` datetime NOT NULL,
- `task_next_fire_time` datetime NOT NULL,
`contact_email` varchar(500) DEFAULT NULL COMMENT '多个邮箱用,分割',
`remark_` varchar(5000) DEFAULT NULL,
`enable_` tinyint(1) DEFAULT '1',
@@ -713,8 +711,8 @@ CREATE TABLE IF NOT EXISTS `task_scheduler` (
-- 正在导出表 ibase4j.task_scheduler 的数据:~0 rows (大约)
/*!40000 ALTER TABLE `task_scheduler` DISABLE KEYS */;
-INSERT INTO `task_scheduler` (`id_`, `group_id`, `task_name`, `task_type`, `task_desc`, `task_cron`, `task_previous_fire_time`, `task_next_fire_time`, `contact_email`, `remark_`, `enable_`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES
- ('1', '1', 'cleanExpiredSessions', 'dubbo', '清理无效session', '0 * * * * ?', '2016-09-21 11:30:00', '2016-09-21 12:00:00', 'iBase4J@126.com', NULL, 1, '1', '2016-06-13 14:05:30', '1', '2016-09-21 11:30:00');
+INSERT INTO `task_scheduler` (`id_`, `group_id`, `task_name`, `task_type`, `task_desc`, `task_cron`, `contact_email`, `remark_`, `enable_`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES
+ ('1', '1', 'cleanExpiredSessions', 'dubbo', '清理无效session', '0 * * * * ?', 'iBase4J@126.com', NULL, 1, '1', '2016-06-13 14:05:30', '1', '2016-09-21 11:30:00');
/*!40000 ALTER TABLE `task_scheduler` ENABLE KEYS */;
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
diff --git a/pom-biz-web-server.xml b/pom-biz-web-server.xml
index a203002ae10cd989bedd239d5c257ff7ca0fe685..38b7c5714ab27a5b77d6cdd7c8732f74ec292e2c 100644
--- a/pom-biz-web-server.xml
+++ b/pom-biz-web-server.xml
@@ -15,7 +15,6 @@
iBase4J-Common
iBase4J-SYS-API
- iBase4J-Scheduler-API
iBase4J-Biz-API
iBase4J-Web
diff --git a/pom-scheduler-server.xml b/pom-scheduler-server.xml
deleted file mode 100644
index b9f2976d1bd7a77eadb033773dd39c5b49fa9e03..0000000000000000000000000000000000000000
--- a/pom-scheduler-server.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
- 4.0.0
- iBase4J-Scheduler-Server
- ${project.artifactId}
- pom
- http://maven.apache.org
-
- org.ibase4j
- iBase4J
- 1.0.0
- ./
-
-
- iBase4J-Common
- iBase4J-Scheduler-API
- iBase4J-Scheduler-Service
-
-
-
\ No newline at end of file
diff --git a/pom-web-server.xml b/pom-web-server.xml
index e93684f84f71a8557db336e29da1ca9989282ac1..5c601bccd89bc89ccf8fc19cbefec2b6d2aa89eb 100644
--- a/pom-web-server.xml
+++ b/pom-web-server.xml
@@ -15,7 +15,6 @@
iBase4J-Common
iBase4J-SYS-API
- iBase4J-Scheduler-API
iBase4J-Web
diff --git a/pom.xml b/pom.xml
index 2067c091874a88f1d79d807988a71fde5ce4ab73..9be6c86384c247bb08cc2fe12379281a8924bc8b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,8 +10,6 @@
http://maven.apache.org
iBase4J-Common
- iBase4J-Scheduler-API
- iBase4J-Scheduler-Service
iBase4J-SYS-API
iBase4J-SYS-Service
iBase4J-Web
@@ -38,7 +36,7 @@
3.4.1
1.3.0
- 1.4.6
+ 2.0-rc
1.7.9
2.4.1