Quartz简单了解

什么是Quartz

    1. Quartz是一个开源的作业调度框架,由java编写,在.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作.
    2. Quartz能干什么/应用场景
      1. 如网页游戏中挂机自动修炼如8个小时,人物相关数值进行成长,当使用某道具后,时间减少到4个小时,人物对应获得成长值.这其中就涉及到了Scheduler的操作,定时对人物进行更新属性操作,更改定时任务执行时间.
      2. 网页游戏中会大量涉及到Scheduler的操作,有兴趣的朋友可自行联想.
      3. 企业中如每天凌晨2点触发数据同步、发送Email等操作
    3. 同类框架对比
      1. TimeTask TimeTask在Quartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.
    4. 资源
      1. 官网:http://www.quartz-scheduler.org/
      2. 下载:http://www.quartz-scheduler.org/downloads
      3. maven pom
                <dependency>
                        <groupId>org.quartz-scheduler</groupId>
                             <artifactId>quartz</artifactId>
                             <version>2.2.1</version>

                </dependency>

二、首先,要创建一个任务,quartz规定任务必须实现org.quarta.Job接口,此接口就一个方法execute,这个方法就是任务执行的时候允许的方法,具体的业务实现在这个方法里,我这里只进行了简单的打印。

package com.tiexiu.myScheduler;

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

public class MyJob implements Job{

    public void execute(JobExecutionContext context) throws JobExecutionException {
        String jobname = context.getTrigger().getJobKey().getName(); //可以通过context参数获取job名等
        System.out.println("Hello World!");
    }

}

三、创建完任务之后,我们还要创建一个包含任务信息的jobDetail,一个管理任务执行的促发器trigger,最后就是调度任务。

package com.tiexiu.myScheduler;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.core.jmx.JobDetailSupport;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzBean {
	static SchedulerFactory schedulerfactory = new StdSchedulerFactory();
	static Scheduler scheduler = null;
    
	 /**
	  * 添加定时任务
	  * 
	  * @param date                任务开始时间
	  * @param job                 任务处理类 需要继承Job
	  * @param jobGorupName        任务组名
	  * @param jobName             任务名称
	  * @return                    0 添加成功 1:任务已经存在 2:添加异常
	  * @throws SchedulerException
	  */
	public static int addJob(Date date,Class<? extends Job> job,
			String jobGorupName,String jobName)  {
		try {
			// 创建一个SchedulerFactory工厂实例
			scheduler = schedulerfactory.getScheduler();
			JobKey jobKey = JobKey.jobKey(jobName, jobGorupName);
			if (scheduler.checkExists(jobKey)) {
				return 1;// 任务已经存在
		}

		// 用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
		// 创建一个JobDetail实例,指定SimpleJob
		Map<String, Object> JobDetailmap = new HashMap<String, Object>();
		JobDetailmap.put("name", jobName);// 设置任务名字
		JobDetailmap.put("group", jobGorupName);// 设置任务组
		JobDetailmap.put("jobClass", job.getCanonicalName());// 指定执行类
		JobDetail jobDetail;
		
			jobDetail = JobDetailSupport.newJobDetail(JobDetailmap);
			// 添加数据内容
//			jobDetail.getJobDataMap().put("task", task);// 传输的上下文
			
			// 构建一个触发器,规定触发的规则
			Trigger simpleTrigger =  TriggerBuilder// 创建一个新的TriggerBuilder来规范一个触发器
					.newTrigger()// 给触发器起一个名字和组名
					.withIdentity(jobName, jobGorupName)
					// .startNow()//立即执行
					.startAt(date)
					.build();// 产生触发器

			// 向Scheduler中添加job任务和trigger触发器
			scheduler.scheduleJob(jobDetail, simpleTrigger);

			// 启动
			scheduler.start();
			return 0;
		} catch (Exception e) {
			e.printStackTrace();
			return 2;// 操作异常
		}
		
	}
	/**
	 * 关闭任务调度
	 * 
	 * @param jobName
	 *            任务名称
	 * @return 0 关闭成功 1: 关闭失败 2:操作异常
	 * @throws SchedulerException 
	 */
	public static int closeJob(String jobName, String jobGorupName)  {
		// 关闭任务调度
		try {
			scheduler = schedulerfactory.getScheduler();
			JobKey jobKey = JobKey.jobKey(jobName, jobGorupName);
			return scheduler.deleteJob(jobKey) == true ? 0 : 1;
		} catch (SchedulerException e) {
			return 2;
		}
	}
}


猜你喜欢

转载自blog.csdn.net/weixin_40760196/article/details/80948766