quartz的简单介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。你想转载请附加连接哦 https://blog.csdn.net/dmw412724/article/details/83987896

quartz把定时任务抽取出三个概念:工作/触发器/调度器,即job/trigger/scheduler。

1.

其中job很简单,直接实现Job即可。

@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException{}

JobExecutionContext 一般用作:scheduler设置任务时可以设置参数传到job里。

2.

Trigger有两个基本的实现:

SimpleTrigger,CronTrigger

SimpleTrigger即是简单的触发器,比如间隔30分钟触发,间隔20秒触发。

CronTrigger是根据日历的复杂触发了。比如每个月1号12点触发,因为每个月的天数不一样,所以这样的需求使用SimpleTrigger是不行的。

3.全部使用举个例子:这个例子放到了web.xml里的lisenner里了。



import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzListener implements ServletContextListener {
	private static Logger log = Logger.getLogger(QuartzListener.class);
	private Scheduler scheduler;
	
	{
		try {
			
			scheduler = new StdSchedulerFactory().getScheduler();
			if (log.isInfoEnabled()){
				log.info("quartz启动");
			}
		} catch (SchedulerException e) {
			
		}
	}

	@Override
	public void contextDestroyed(ServletContextEvent se) {
		try {
			scheduler.shutdown();
			if (log.isInfoEnabled()){
				log.info("quartz关闭");
			}
		} catch (SchedulerException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void contextInitialized(ServletContextEvent se) {
		/**
		 * 第一个工作CleanOrderJob实现了Job
		 */
		JobDetail cleanOrderJob = 
				JobBuilder.newJob(CleanOrderJob.class)
				.withIdentity("CleanOrderJob")
				.build();
		/**
		 * 第二个工作CleanQrJob实现了Job
		 */
		JobDetail cleanQrJob = 
				JobBuilder.newJob(CleanQrJob.class)
				.withIdentity("CleanQrJob")
				.build();
		/**
		 * 触发器1.
		 */
		SimpleTrigger min_30 = 
				TriggerBuilder
				.newTrigger()
				.withIdentity("min_30")
				.startNow()
				//间隔时间60*30秒
				.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(60 * 30).repeatForever())
				.build();
		/**
		 * 触发器2
		 */
		SimpleTrigger hour_6 = 
				TriggerBuilder
				.newTrigger()
				.withIdentity("hour_6")
				.startNow()
				//间隔时间60 * 60 * 6秒
				.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(60 * 60 * 6).repeatForever())
				.build();
		try {
			/**
			 * 启动
			 */
			scheduler.start();
			/**
			 * 按触发器1执行第1个任务
			 */
			scheduler.scheduleJob(cleanOrderJob, min_30);
			/**
			 * 按触发器2执行第2个任务
			 */
			scheduler.scheduleJob(cleanQrJob, hour_6);
		} catch (SchedulerException e) {
			
			e.printStackTrace();
		}

	}

}

猜你喜欢

转载自blog.csdn.net/dmw412724/article/details/83987896