quartz的簡單介紹

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();
		}

	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章