美文网首页
Quartz (1) - 简单应用

Quartz (1) - 简单应用

作者: 游园拾忆 | 来源:发表于2017-11-18 10:43 被阅读10次

    记住四个重要对象

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

    相关文章

      网友评论

          本文标题:Quartz (1) - 简单应用

          本文链接:https://www.haomeiwen.com/subject/hxfgmxtx.html