XNQuartzJob.java 4.68 KB
package com.xiniunet.quartz.base;

import com.xiniunet.quartz.TaskCheckIsOverdueJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

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

public abstract class XNQuartzJob implements Job {

    static Scheduler scheduler = null;

    public  Boolean  addScheduleJob(JobDetail jobDetail, Trigger triggerTemp)
    {
        Date date = null;
        try {
            scheduler.addJob(jobDetail, true);
            if (scheduler.checkExists(triggerTemp.getKey()))
            {

                date = scheduler.rescheduleJob(triggerTemp.getKey(), triggerTemp);



            }
            else
            {

                date = scheduler.scheduleJob(triggerTemp);
            }

            return  date != null;
        } catch (SchedulerException e) {
            return false;
        }
    }




    final  static String jobGroup = "TASK_CENTER";

    JobDetail jobDetail = null;
    Trigger trigger = null;

    private String triggerName, triggerGroup;
    private String triggerData;
    public XNQuartzJob() {
        // 获取Scheduler实例
        if (scheduler == null)
        {
            try {
                scheduler = StdSchedulerFactory.getDefaultScheduler();
                // 启动调度器
                scheduler.start();

            } catch (SchedulerException se) {

            }
        }
    }
    public JobDetail getJobDetail() {
        return jobDetail;
    }
    public Trigger getTrigger() {
        return trigger;
    }

    public void setTrigger(Trigger trigger) {
        this.trigger = trigger;
    }
    protected void setJobTag(String name)
    {
//        // 具体任务
//        JobDetail job = JobBuilder.newJob(TaskCheckIsOverdueJob.class).withIdentity("job1", "group2").build();
//        // 在任务回调的时候,获取传递的参数,在任务回调的时候,完成想要的操作
//        job.getJobDataMap().put("taskId", "I am Hello Job ...");
//
//        // 触发时间点
//        SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule()//
//                .withIntervalInSeconds(5)//
//                .repeatForever();//
//        Trigger trigger = TriggerBuilder.newTrigger()//
//                .withIdentity("trigger1", "group2")//
//                .withSchedule(simpleScheduleBuilder).build();//
//
//        quartzManager.addScheduleJob(job, trigger);
        try {
            if (scheduler.checkExists(new JobKey(name, jobGroup)) == true)
            {
                jobDetail = scheduler.getJobDetail(new JobKey(name, jobGroup));
            }
            else
            {
                jobDetail = JobBuilder.newJob(this.getClass()).withIdentity(name, jobGroup).storeDurably(true).build();
            }
        } catch (SchedulerException e) {
            e.printStackTrace();
            jobDetail = JobBuilder.newJob(this.getClass()).withIdentity(name, jobGroup).build();
        }


    }


    public void setTriggerTag(String name, String group)
    {
       triggerName = name;
       triggerGroup = group;

    }
    public void setTriggerData(String data)
    {
        triggerData = data;
    }
    public void setIntervalInMilliseconds(long milliseconds, int repeatCount)
    {
        SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule()//
                .withIntervalInMilliseconds(milliseconds);
        if (repeatCount == 0)
        {
            simpleScheduleBuilder = simpleScheduleBuilder.repeatForever();
        }
        else
        {
            simpleScheduleBuilder = simpleScheduleBuilder.withRepeatCount(repeatCount);
        }


        trigger = TriggerBuilder.newTrigger()
                .withIdentity(triggerName, triggerGroup)
                .withSchedule(simpleScheduleBuilder)
                .forJob(jobDetail)
                .build();
        trigger.getJobDataMap().put("data", triggerData);
        addScheduleJob(jobDetail, trigger);


    }

    public void setCronTrigger(String cron)
    {
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
        trigger = TriggerBuilder.newTrigger().withIdentity(triggerName, triggerGroup)
                .withSchedule(cronScheduleBuilder)
                .forJob(jobDetail)
                .build();
        trigger.getJobDataMap().put("data", triggerData);
        addScheduleJob(jobDetail, trigger);
    }

    public static String getCron(java.util.Date  date){
        String dateFormat="ss mm HH dd MM ? yyyy";
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        String formatTimeStr = null;
        if (date != null) {
            formatTimeStr = sdf.format(date);
        }

        return formatTimeStr;
    }
}