quartz demo MyScheduler


package ?;

import java.util.ArrayList;

import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.dcb.customs.b.pojo.TimedTask;

import ?.c.job.*;
import ?.d.service.BackupAndRemoveServiceImpl;

/**
 * 任务调度
 */
@SuppressWarnings("unused")
public class MyScheduler{

    private static Logger log = LogManager.getLogger(MyScheduler.class);
    
    public static void main(String[] args) throws SchedulerException, ClassNotFoundException {
        // 1、创建调度器Scheduler
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();

        // 查詢数据库动态定时任务
        
        // 定时class为继承Job
        List list = new ArrayList<>();
        list.add(new TimedTask(1, "2021-01-01", "0 0/10 * * * ?", 1,
                MyScheduler.class.getClassLoader().loadClass("?.c.job.?")));
        list.add(new TimedTask(2, "2021-01-01", "0 0/1 * * * ?", 1,
                MyScheduler.class.getClassLoader().loadClass("?.c.job.?")));
        list.add(new TimedTask(3, "2021-01-01", "0 0 0 */1 * ?", 1,
                MyScheduler.class.getClassLoader().loadClass("?.c.job.BackupAndRemoveJob")));
        
        for (int i = 0; i < list.size(); i++) {
            // 2、创建JobDetail实例,并与PrintWordsJob类绑定(Job执行内容)
            JobDetail jobDetail = JobBuilder.newJob(list.get(i).getJobClass())
                    .usingJobData("jobDetail-"+list.get(i).getId(), "Job")
                    .withIdentity("job-"+list.get(i).getId(), "group-"+list.get(i).getId()).build();
            
//            // 传参
//            jobDetail.getJobDataMap().put("pool", list.get(i));
            
            // 3、构建Trigger实例
            CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger-"+list.get(i).getId(), "triggerGroup-"+list.get(i).getId())
                    .usingJobData("trigger-"+list.get(i).getId(), "这是jobDetail的trigger")
                    .startNow()//立即生效
                    .withSchedule(CronScheduleBuilder.cronSchedule(list.get(i).getCron() ))
                    .build();
            
            //4、执行
            scheduler.scheduleJob(jobDetail, cronTrigger);
            log.info("--------scheduler " + list.get(i).getId() + " start ! ------------");
            scheduler.start();
            log.info("--------scheduler " + list.get(i).getId() + " shutdown ! ------------");
            
        }
    }

}

package ?.b.pojo;

/**
 * 定时任务
 */
public class TimedTask {
        
    // 定时任务
    private Integer id;
    private String creatTime;
    private String cron;
    private Integer status;// (开关)
    private Class<?> jobClass;

    public TimedTask() {
        super();
    }

    public TimedTask(Integer id, String creatTime, String cron, Integer status,
            Class<?> jobClass) {
        super();
        this.id = id;
        this.creatTime = creatTime;
        this.cron = cron;
        this.status = status;
        this.jobClass = jobClass;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCreatTime() {
        return creatTime;
    }

    public void setCreatTime(String creatTime) {
        this.creatTime = creatTime;
    }

    public String getCron() {
        return cron;
    }

    public void setCron(String cron) {
        this.cron = cron;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Class getJobClass() {
        return jobClass;
    }

    public void setJobClass(Class jobClass) {
        this.jobClass = jobClass;
    }

    @Override
    public String toString() {
        return "Pool [id=" + id + ", creatTime=" + creatTime + ", cron=" + cron
                + ", status=" + status + ", jobClass=" + jobClass + "]";
    }

}

package ?.c.job;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import ?.d.service.BackupAndRemoveServiceImpl;

/**
 * 备份和移动工作
 */
public class BackupAndRemoveJob implements Job {

    private static Logger log = LogManager.getLogger(BackupAndRemoveJob.class);

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        // TODO Auto-generated method stub
        log.info(" BackupAndRemove " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) );
        
        BackupAndRemoveServiceImpl backupService = new BackupAndRemoveServiceImpl();
        backupService.dbBackup();
        backupService.fileBackup();
    }
}