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 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 jobClass; + + public TriggerLoader(Class 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 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 jobClass; // 执行作业的类 - - public TriggerLoader(String taskType, Class 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