Quartz 简单应用

官网:http://www.quartz-scheduler.org/

下载:http://www.quartz-scheduler.org/downloads

maven地址

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>

首先,要创建一个任务,quartz规定任务必须实现org.quarta.Job接口

此接口就一个方法execute,这个方法就是任务执行的时候允许的方法,具体的业务实现在这个方法里,我这里只进行了简单的打印。

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,最后就是调度任务。

import org.quartz.Job;
import org.quartz.JobBuilder;
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);// 传输的上下文

			//date.setTime(date.getTime() + 30000L);
			// 构建一个触发器,规定触发的规则
			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_40461281/article/details/80971468