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
相关文章
相关标签/搜索