瀏覽代碼

:zap: 规范定时任务类名

Aron 6 年之前
父節點
當前提交
aecddfbefc

+ 3 - 3
src/main/java/com/ifast/common/utils/ScheduleJobUtils.java

@@ -1,11 +1,11 @@
 package com.ifast.common.utils;
 
-import com.ifast.job.domain.ScheduleJob;
+import com.ifast.job.domain.ScheduleJobDO;
 import com.ifast.job.domain.TaskDO;
 
 public class ScheduleJobUtils {
-	public static ScheduleJob entityToData(TaskDO scheduleJobEntity) {
-		ScheduleJob scheduleJob = new ScheduleJob();
+	public static ScheduleJobDO entityToData(TaskDO scheduleJobEntity) {
+		ScheduleJobDO scheduleJob = new ScheduleJobDO();
 		scheduleJob.setBeanClass(scheduleJobEntity.getBeanClass());
 		scheduleJob.setCronExpression(scheduleJobEntity.getCronExpression());
 		scheduleJob.setDescription(scheduleJobEntity.getDescription());

+ 20 - 23
src/main/java/com/ifast/job/config/QuartzConfigration.java

@@ -1,10 +1,6 @@
 package com.ifast.job.config;
 
-import java.io.IOException;
-import java.util.Properties;
-
-import javax.sql.DataSource;
-
+import com.ifast.job.quartz.JobFactory;
 import org.apache.commons.lang3.StringUtils;
 import org.quartz.Scheduler;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,7 +10,9 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 
-import com.ifast.job.quartz.JobFactory;
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.util.Properties;
 
 @Configuration
 public class QuartzConfigration {
@@ -25,25 +23,22 @@ public class QuartzConfigration {
     DataSource dataSource;
 
     @Bean
-    public SchedulerFactoryBean schedulerFactoryBean() {
+    public SchedulerFactoryBean schedulerFactoryBean(Properties quartzProperties) {
         SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
-        try {
-            schedulerFactoryBean.setOverwriteExistingJobs(true);
-            Properties quartzProperties = quartzProperties();
-            schedulerFactoryBean.setQuartzProperties(quartzProperties);
-            //如果开启了cluster特性,又没有自定义dataSource,则使用ifast定义好的DataSource,需要先导入quartz.sql
-            if("true".equalsIgnoreCase(quartzProperties.getProperty("org.quartz.jobStore.isClustered"))
-            		&& StringUtils.isBlank(quartzProperties.getProperty("org.quartz.jobStore.dataSource"))) {
-            	schedulerFactoryBean.setDataSource(dataSource);
-            }
-            schedulerFactoryBean.setJobFactory(jobFactory);
-        } catch (IOException e) {
-            e.printStackTrace();
+        schedulerFactoryBean.setOverwriteExistingJobs(true);
+        schedulerFactoryBean.setQuartzProperties(quartzProperties);
+        //如果开启了cluster特性,又没有自定义dataSource,则使用ifast定义好的DataSource,需要先导入quartz.sql
+        if ("true".equalsIgnoreCase(quartzProperties.getProperty("org.quartz.jobStore.isClustered"))
+                && StringUtils.isBlank(quartzProperties.getProperty("org.quartz.jobStore.dataSource"))) {
+            schedulerFactoryBean.setDataSource(dataSource);
         }
+        schedulerFactoryBean.setJobFactory(jobFactory);
         return schedulerFactoryBean;
     }
 
-    // 指定quartz.properties
+    /**
+     * 指定quartz.properties
+     */
     @Bean
     public Properties quartzProperties() throws IOException {
         PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
@@ -52,9 +47,11 @@ public class QuartzConfigration {
         return propertiesFactoryBean.getObject();
     }
 
-    // 创建schedule
+    /**
+     * 创建schedule
+     */
     @Bean(name = "scheduler")
-    public Scheduler scheduler() {
-        return schedulerFactoryBean().getScheduler();
+    public Scheduler scheduler(Properties quartzProperties) {
+        return schedulerFactoryBean(quartzProperties).getScheduler();
     }
 }

+ 1 - 1
src/main/java/com/ifast/job/controller/JobController.java

@@ -36,7 +36,7 @@ public class JobController extends AdminBaseController {
     @ResponseBody
     @GetMapping("/list")
     public Result<Page<TaskDO>> list(TaskDO taskDTO) {
-        Wrapper<TaskDO> wrapper = new EntityWrapper<TaskDO>(taskDTO);
+        Wrapper<TaskDO> wrapper = new EntityWrapper<>(taskDTO);
         Page<TaskDO> page = taskScheduleJobService.selectPage(getPage(TaskDO.class), wrapper);
         return Result.ok(page);
     }

+ 65 - 68
src/main/java/com/ifast/job/domain/ScheduleJob.java

@@ -1,69 +1,66 @@
-package com.ifast.job.domain;
-
-import lombok.Data;
-import org.quartz.Job;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-
-import java.io.Serializable;
-
-/**
- * <pre>
- * </pre>
- * <small> 2018年3月23日 | Aron</small>
- */
-@SuppressWarnings("serial")
-@Data
-public class ScheduleJob implements Serializable, Job {
-
-    public static final String STATUS_RUNNING = "1";
-    public static final String STATUS_NOT_RUNNING = "0";
-    public static final String CONCURRENT_IS = "1";
-    public static final String CONCURRENT_NOT = "0";
-
-    /**
-     * 任务名称
-     */
-    private String jobName;
-    /**
-     * 任务分组
-     */
-    private String jobGroup;
-    /**
-     * 任务状态 是否启动任务
-     */
-    private String jobStatus;
-    /**
-     * cron表达式
-     */
-    private String cronExpression;
-    /**
-     * 描述
-     */
-    private String description;
-    /**
-     * 任务执行时调用哪个类的方法 包名+类名
-     */
-    private String beanClass;
-    /**
-     * 任务是否有状态
-     */
-    private String isConcurrent;
-
-    /**
-     * Spring bean
-     */
-    private String springBean;
-
-    /**
-     * 任务调用的方法名
-     */
-    private String methodName;
-
-    @Override
-    public void execute(JobExecutionContext context) throws JobExecutionException {
-        // TODO Auto-generated method stub
-
-    }
-
+package com.ifast.job.domain;
+
+import lombok.Data;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+
+import java.io.Serializable;
+
+/**
+ * <pre>
+ * </pre>
+ * <small> 2018年3月23日 | Aron</small>
+ */
+@Data
+public class ScheduleJobDO implements Serializable, Job {
+
+    public static final String STATUS_RUNNING = "1";
+    public static final String STATUS_NOT_RUNNING = "0";
+    public static final String CONCURRENT_IS = "1";
+    public static final String CONCURRENT_NOT = "0";
+
+    /**
+     * 任务名称
+     */
+    private String jobName;
+    /**
+     * 任务分组
+     */
+    private String jobGroup;
+    /**
+     * 任务状态 是否启动任务
+     */
+    private String jobStatus;
+    /**
+     * cron表达式
+     */
+    private String cronExpression;
+    /**
+     * 描述
+     */
+    private String description;
+    /**
+     * 任务执行时调用哪个类的方法 包名+类名,即全限定名
+     */
+    private String beanClass;
+    /**
+     * 任务是否有状态
+     */
+    private String isConcurrent;
+
+    /**
+     * Spring bean
+     */
+    private String springBean;
+
+    /**
+     * 任务调用的方法名
+     */
+    private String methodName;
+
+    @Override
+    public void execute(JobExecutionContext context){
+
+    }
+
 }

+ 26 - 121
src/main/java/com/ifast/job/quartz/QuartzManager.java

@@ -1,29 +1,18 @@
 package com.ifast.job.quartz;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-import org.quartz.CronScheduleBuilder;
-import org.quartz.CronTrigger;
-import org.quartz.DateBuilder;
+import com.ifast.job.domain.ScheduleJobDO;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
 import org.quartz.DateBuilder.IntervalUnit;
-import org.quartz.Job;
-import org.quartz.JobBuilder;
-import org.quartz.JobDetail;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobKey;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-import org.quartz.Trigger;
-import org.quartz.TriggerBuilder;
-import org.quartz.TriggerKey;
 import org.quartz.impl.matchers.GroupMatcher;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.ifast.job.domain.ScheduleJob;;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+;
 
 
 /**
@@ -33,36 +22,25 @@ import com.ifast.job.domain.ScheduleJob;;
  * <small> 2018年3月23日 | Aron</small>
  */
 @Service
+@Slf4j
 public class QuartzManager {
-    public final Logger log = Logger.getLogger(this.getClass());
-    // private SchedulerFactoryBean schedulerFactoryBean
-    // =SpringContextHolder.getBean(SchedulerFactoryBean.class);
-    // @Autowired
-    // @Qualifier("schedulerFactoryBean")
-    // private SchedulerFactoryBean schedulerFactoryBean;
     @Autowired
     private Scheduler scheduler;
 
     /**
      * 添加任务
-     * 
-     * @param scheduleJob
-     * @throws SchedulerException
      */
-
     @SuppressWarnings("unchecked")
-    public void addJob(ScheduleJob job) {
+    public void addJob(ScheduleJobDO job) {
         try {
             // 创建jobDetail实例,绑定Job实现类
-            // 指明job的名称,所在组的名称,以及绑定job类
-
             Class<? extends Job> jobClass = (Class<? extends Job>) (Class.forName(job.getBeanClass()).newInstance()
                     .getClass());
-            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(job.getJobName(), job.getJobGroup())// 任务名称和组构成任务key
+            // 任务名称和组构成任务key
+            JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(new JobKey(job.getJobName(), job.getJobGroup()))
                     .build();
-            // 定义调度触发规则
-            // 使用cornTrigger规则
-            Trigger trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())// 触发器key
+            // 定义corn表达式调度触发器
+            Trigger trigger = TriggerBuilder.newTrigger().withIdentity(new TriggerKey(job.getJobName(), job.getJobGroup()))
                     .startAt(DateBuilder.futureDate(1, IntervalUnit.SECOND))
                     .withSchedule(CronScheduleBuilder.cronSchedule(job.getCronExpression())).startNow().build();
             // 把作业和触发器注册到任务调度中
@@ -72,71 +50,21 @@ public class QuartzManager {
                 scheduler.start();
             }
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error(e.getMessage());
         }
     }
-    // public void addJob(ScheduleJob job) throws SchedulerException {
-    // if (job == null || !ScheduleJob.STATUS_RUNNING.equals(job.getJobStatus())) {
-    // return;
-    // }
-    //
-    // TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(),
-    // job.getJobGroup());
-    //
-    // CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
-    //
-    // // 不存在,创建一个
-    //
-    // if (null == trigger) {
-    // Class<? extends Job> clazz =
-    // ScheduleJob.CONCURRENT_IS.equals(job.getIsConcurrent())
-    // ? QuartzJobFactory.class
-    // : QuartzJobFactoryDisallowConcurrentExecution.class;
-    //
-    // JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(job.getJobName(),
-    // job.getJobGroup()).build();
-    //
-    // jobDetail.getJobDataMap().put("scheduleJob", job);
-    //
-    // CronScheduleBuilder scheduleBuilder =
-    // CronScheduleBuilder.cronSchedule(job.getCronExpression());
-    //
-    // trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(),
-    // job.getJobGroup())
-    // .withSchedule(scheduleBuilder).build();
-    //
-    // scheduler.scheduleJob(jobDetail, trigger);
-    // } else {
-    // // Trigger已存在,那么更新相应的定时设置
-    //
-    // CronScheduleBuilder scheduleBuilder =
-    // CronScheduleBuilder.cronSchedule(job.getCronExpression());
-    //
-    // // 按新的cronExpression表达式重新构建trigger
-    //
-    // trigger =
-    // trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
-    //
-    // // 按新的trigger重新设置job执行
-    //
-    // scheduler.rescheduleJob(triggerKey, trigger);
-    // }
-    // }
 
     /**
      * 获取所有计划中的任务列表
-     * 
-     * @return
-     * @throws SchedulerException
      */
-    public List<ScheduleJob> getAllJob() throws SchedulerException {
+    public List<ScheduleJobDO> getAllJob() throws SchedulerException {
         GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
         Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
-        List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();
+        List<ScheduleJobDO> jobList = new ArrayList<>();
         for (JobKey jobKey : jobKeys) {
             List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
             for (Trigger trigger : triggers) {
-                ScheduleJob job = new ScheduleJob();
+                ScheduleJobDO job = new ScheduleJobDO();
                 job.setJobName(jobKey.getName());
                 job.setJobGroup(jobKey.getGroup());
                 job.setDescription("触发器:" + trigger.getKey());
@@ -155,15 +83,12 @@ public class QuartzManager {
 
     /**
      * 所有正在运行的job
-     * 
-     * @return
-     * @throws SchedulerException
      */
-    public List<ScheduleJob> getRunningJob() throws SchedulerException {
+    public List<ScheduleJobDO> getRunningJob() throws SchedulerException {
         List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();
-        List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size());
+        List<ScheduleJobDO> jobList = new ArrayList<ScheduleJobDO>(executingJobs.size());
         for (JobExecutionContext executingJob : executingJobs) {
-            ScheduleJob job = new ScheduleJob();
+            ScheduleJobDO job = new ScheduleJobDO();
             JobDetail jobDetail = executingJob.getJobDetail();
             JobKey jobKey = jobDetail.getKey();
             Trigger trigger = executingJob.getTrigger();
@@ -184,33 +109,24 @@ public class QuartzManager {
 
     /**
      * 暂停一个job
-     * 
-     * @param scheduleJob
-     * @throws SchedulerException
      */
-    public void pauseJob(ScheduleJob scheduleJob) throws SchedulerException {
+    public void pauseJob(ScheduleJobDO scheduleJob) throws SchedulerException {
         JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
         scheduler.pauseJob(jobKey);
     }
 
     /**
      * 恢复一个job
-     * 
-     * @param scheduleJob
-     * @throws SchedulerException
      */
-    public void resumeJob(ScheduleJob scheduleJob) throws SchedulerException {
+    public void resumeJob(ScheduleJobDO scheduleJob) throws SchedulerException {
         JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
         scheduler.resumeJob(jobKey);
     }
 
     /**
      * 删除一个job
-     * 
-     * @param scheduleJob
-     * @throws SchedulerException
      */
-    public void deleteJob(ScheduleJob scheduleJob) throws SchedulerException {
+    public void deleteJob(ScheduleJobDO scheduleJob) throws SchedulerException {
         JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
         scheduler.deleteJob(jobKey);
 
@@ -218,31 +134,20 @@ public class QuartzManager {
 
     /**
      * 立即执行job
-     * 
-     * @param scheduleJob
-     * @throws SchedulerException
      */
-    public void runAJobNow(ScheduleJob scheduleJob) throws SchedulerException {
+    public void runAJobNow(ScheduleJobDO scheduleJob) throws SchedulerException {
         JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
         scheduler.triggerJob(jobKey);
     }
 
     /**
      * 更新job时间表达式
-     * 
-     * @param scheduleJob
-     * @throws SchedulerException
      */
-    public void updateJobCron(ScheduleJob scheduleJob) throws SchedulerException {
-
+    public void updateJobCron(ScheduleJobDO scheduleJob) throws SchedulerException {
         TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
-
         CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
-
         CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());
-
         trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
-
         scheduler.rescheduleJob(triggerKey, trigger);
     }
 }

+ 11 - 12
src/main/java/com/ifast/job/service/impl/JobServiceImpl.java

@@ -1,20 +1,19 @@
 package com.ifast.job.service.impl;
 
-import java.io.Serializable;
-import java.util.List;
-
-import org.quartz.SchedulerException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.ifast.common.base.CoreServiceImpl;
 import com.ifast.common.config.Constant;
 import com.ifast.common.utils.ScheduleJobUtils;
 import com.ifast.job.dao.TaskDao;
-import com.ifast.job.domain.ScheduleJob;
+import com.ifast.job.domain.ScheduleJobDO;
 import com.ifast.job.domain.TaskDO;
 import com.ifast.job.quartz.QuartzManager;
 import com.ifast.job.service.JobService;
+import org.quartz.SchedulerException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.Serializable;
+import java.util.List;
 
 /**
  * <pre>
@@ -61,7 +60,7 @@ public class JobServiceImpl extends CoreServiceImpl<TaskDao, TaskDO> implements
         List<TaskDO> jobList = baseMapper.selectList(null);
         for (TaskDO scheduleJob : jobList) {
             if ("1".equals(scheduleJob.getJobStatus())) {
-                ScheduleJob job = ScheduleJobUtils.entityToData(scheduleJob);
+                ScheduleJobDO job = ScheduleJobUtils.entityToData(scheduleJob);
                 quartzManager.addJob(job);
             }
 
@@ -76,11 +75,11 @@ public class JobServiceImpl extends CoreServiceImpl<TaskDao, TaskDO> implements
         }
         if (Constant.Job.STATUS_RUNNING_STOP.equals(cmd)) {
             quartzManager.deleteJob(ScheduleJobUtils.entityToData(scheduleJob));
-            scheduleJob.setJobStatus(ScheduleJob.STATUS_NOT_RUNNING);
+            scheduleJob.setJobStatus(ScheduleJobDO.STATUS_NOT_RUNNING);
         } else {
             if (!Constant.Job.STATUS_RUNNING_START.equals(cmd)) {
             } else {
-                scheduleJob.setJobStatus(ScheduleJob.STATUS_RUNNING);
+                scheduleJob.setJobStatus(ScheduleJobDO.STATUS_RUNNING);
                 quartzManager.addJob(ScheduleJobUtils.entityToData(scheduleJob));
             }
         }
@@ -93,7 +92,7 @@ public class JobServiceImpl extends CoreServiceImpl<TaskDao, TaskDO> implements
         if (scheduleJob == null) {
             return;
         }
-        if (ScheduleJob.STATUS_RUNNING.equals(scheduleJob.getJobStatus())) {
+        if (ScheduleJobDO.STATUS_RUNNING.equals(scheduleJob.getJobStatus())) {
             quartzManager.updateJobCron(ScheduleJobUtils.entityToData(scheduleJob));
         }
         updateById(scheduleJob);