记住四个重要对象
-
1、Job
表示一个工作,要执行的具体内容。此接口中只有一个方法void execute(JobExecutionContext context){}
-
2、JobDetail
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
-
3、Trigger
代表一个调度参数的配置,什么时候去调,配置计划时间等。
-
4、Scheduler
代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。
实例(通过接口手动开启作业,非计划任务,可在Trigger自行配置)
- 1、创建作业
package com.mandi.money.test;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class testJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("----- wo ui rf wu 1 --------");
}
}
- 2、作业启动方法
package com.mandi.money.test;
import java.util.Date;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.triggers.SimpleTriggerImpl;
public class jobScheduler {
public String exe(String jobClassName) {
//创建 JobDetail
JobDetailImpl jd = new JobDetailImpl();
Class jobClass = null;
try {
jobClass = Class.forName(jobClassName);
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
jd.setJobClass(jobClass);//刚才那个作业类job
jd.setGroup(jobClass.getSimpleName());//名字任意取
jd.setName(jobClass.getSimpleName());//名字任意取
//调度参数的配置,作业开始时间,重复时间等等
SimpleTriggerImpl trigger = new SimpleTriggerImpl();
trigger.setName(jobClass.getSimpleName());//名字任意取
trigger.setGroup(jobClass.getSimpleName());//名字任意取
trigger.setStartTime(new Date());
//调度容器,开启任务
SchedulerFactory scheduler = new StdSchedulerFactory();
try {
Scheduler s = scheduler.getScheduler();
s.scheduleJob(jd, trigger);
s.start();
return "任务执行中······";
} catch (SchedulerException e) {
e.printStackTrace();
return "出错了";
}
}
}
- 3、在通过接口开启执行作业
@RequestMapping(value = "/job1.htm")
public void job1(HttpServletRequest req, HttpServletResponse res) throws RuntimeException {
jobScheduler jbs = new jobScheduler();
String result = jbs.exe(testJob.class.getName());
System.out.println(result);
//查询作业状态
SchedulerFactory sf=new StdSchedulerFactory();
try {
TriggerState state=sf.getScheduler().getTriggerState(new TriggerKey("testJob", "testJob"));
System.out.println("状态:"+state);
} catch (SchedulerException e) {
e.printStackTrace();
}
}