Quartz (1) - 简单应用

记住四个重要对象

  • 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();
        }
        
    }
posted @ 2017-11-18 10:43  游园拾忆  阅读(35)  评论(0编辑  收藏  举报