Quartz定時

前段時間有位朋友問了我Quartz的使用,因而嘗試些了個簡單的例子向解釋Quartz的使用java

Quartz的一些基本使用express

package com.quartz;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerContext;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;

public class ActionJob implements Job {
	
	public static void main(String[] args) {
		try {
			StdSchedulerFactory factory = new StdSchedulerFactory();
			Scheduler scheduler = factory.getScheduler();
			SchedulerContext context = scheduler.getContext();
			context.put("args", "args[0]");
			String expression = "00 26 15 ? * MON";
			JobDetail detail = newJob(ActionJob.class)
					.withIdentity("detail_name", "detail_group").build();
			Trigger trigger = newTrigger()
					.withIdentity("trigger_name", "trigger_group")
					.withSchedule(cronSchedule(expression)).build();
			scheduler.scheduleJob(detail, trigger);
			scheduler.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		Scheduler scheduler = context.getScheduler();
		TriggerKey triggerKey = context.getTrigger().getKey();
		try {
			System.out.println("外部參數:" + scheduler.getContext().getString("args"));
//			scheduler.pauseTrigger(triggerKey);執行任務前暫停這個任務,按需使用
			String path = "com.quartz.Task";
			//加載任務類
			Class<?> clas = Class.forName(path);
			Object o = clas.newInstance();//實例化已任務類對象
			//獲取啓動方法,並啓動
			clas.getMethod("execute", Config.class).invoke(o, new Config());
		} catch (Exception e) {
			e.printStackTrace();
		}
//		finally {
//			try {
//				scheduler.resumeTrigger(triggerKey);
//			} catch (SchedulerException e) {
//				e.printStackTrace();
//			}
//		} //無論任務是否成功,始終都解除這個任務。按需使用
	}
}

任務類ide

package com.quartz;

public class Task {
	
	public void execute(Config config) {
		//執行任務
		System.out.println("just " + config.name);
	}
}

任務所需配置類測試

package com.quartz;

public class Config {

	public String name = "test";
}

測試輸出ui

外部參數:args[0]
just test
相關文章
相關標籤/搜索