关于Quartz的简单使用

标签: Quartz  线程调度

    最近写的一个项目使用到了Quartz这个插件,我也了解了一下,基本是用于定时任务的功能。之后写了一个demo把这个功能单独提取出来了。

(1)首先看下这个demo的结构:

再来看下主要代码:

调度器QuartzConfig.java:

package quart;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

/**
 *  2017/12/28.
 */
public class QuartzConfig {

    public Scheduler scheduler() throws SchedulerException {
        // 通过schedulerFactory获取一个调度器
        SchedulerFactory schedulerfactory = new StdSchedulerFactory();
        // 通过schedulerFactory获取一个调度器
        Scheduler scheduler = schedulerfactory.getScheduler();
        return scheduler;
    }
}

设置任务具体Quartz:

package quart;

import java.util.Date;

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.TriggerBuilder;
import org.quartz.TriggerKey;

public class Quartz {
	
	 private static String JOBGROUP = "group1";

	 public static CronTrigger addOrUpdateQuartz() throws SchedulerException{
		 
		 //设置任务id
		 Long taskid = (long) 2;
		 //设置任务执行特殊字符串
		 String CronValue = "*/1 * * * * ? *";
		 
		 QuartzConfig quartzConfig = new QuartzConfig();
		 Scheduler scheduler = quartzConfig.scheduler();
	        CronTrigger trigger = null;
	        try {
	            //获取触发器标识
	            TriggerKey triggerKey = TriggerKey.triggerKey(taskid.toString(), JOBGROUP);
	            //获取触发器trigger
	            trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
	            if(null==trigger){//不存在任务
	                //创建任务
	                JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class)
	                        .withIdentity(taskid.toString(), JOBGROUP)
	                        .build();
	                jobDetail.getJobDataMap().put("taskId", taskid);
	                //表达式调度构建器
	                //这里的时间也可以通过页面传送过来。具体怎么写请看上一篇quartz介绍
	                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(CronValue).withMisfireHandlingInstructionDoNothing();
	                //按新的cronExpression表达式构建一个新的trigger
	                //手动的优先级为5 自动的优先级按照高中低为3,2,1
	                int priority = 3;
	                TriggerBuilder<CronTrigger> builder = TriggerBuilder.newTrigger()
	                        .withIdentity(taskid.toString(), JOBGROUP)
	                        .withPriority(priority)
	                        .withSchedule(scheduleBuilder);
	                builder.startAt(new Date());
                    builder.endAt(new Date(2018,8,30));
	                //builder.startNow();
	                trigger = builder.build();
	                scheduler.scheduleJob(jobDetail, trigger);
	                scheduler.start();
	            }else{//存在任务
	                // Trigger已存在,那么更新相应的定时设置
	                //表达式调度构建器

	                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(CronValue);
	                //按新的cronExpression表达式重新构建trigger
	                trigger = trigger.getTriggerBuilder()
	                        .withIdentity(triggerKey)
	                        .withSchedule(scheduleBuilder)
	                        .build();
	                //按新的trigger重新设置job执行
	                scheduler.rescheduleJob(triggerKey, trigger);
	            }
	        } catch (SchedulerException e) {
	            //throw new BusinessException("该任务无效!");
	        }
	        return trigger;
	    }

}

这里解释下代码:首先设置任务执行时间:String CronValue = "*/1 * * * * ? *";具体表达式怎么写,请读者自行百度,我这里设置是每隔一秒的时间。就去执行干活操作。

要干的活:

package quart;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * 定时任务发送请求 Created by ruby_ on 2017/12/28.
 */
public class QuartzJob implements Job {

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		/**
		 * 这里就是要这个定时器,按照你的定时去做什么事情,可以连接数据库,查询数据等等,这里我是让他不断打印这个东西
		 */
		System.out.println("干活去咯---");
	}
}

最后再来个主程序启动它

package quart;

import org.quartz.CronTrigger;
import org.quartz.SchedulerException;

public class main {

	public static void main(String[] args) throws SchedulerException {
		System.out.println("开始");
		CronTrigger  c=  Quartz.addOrUpdateQuartz();
		System.out.println("---"+c);
	}

}

最后的执行结果就是这样:

刚接触,有许多不懂,欢迎大佬补充

版权声明:本文为qq_34178998原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34178998/article/details/82349694