zoukankan      html  css  js  c++  java
  • 任务调度 Quartz 学习(一) SimpleTrigger

    概述:

      在实际开发过程中,会遇到很多任务调度的需求。

      比如说:某网站要在每周一上午9点更新网站数据,并发邮件通知用户;

      再比如某论坛需求:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定用户解锁任务。

      这时就可以使用quartz来实现了。

    几个重要的类:

      ●Job(接口)

    public interface Job {
        void execute(JobExecutionContext var1) throws JobExecutionException;
    }

      JobDetail: 真正的任务内容,任务本身是集成Job接口的,但是真正的任务是JobBuilder通过反射的方式实例化的,
      Trigger: 触发器,定义任务应当开始的时间,主要分为两类SimpleTrigger,CronTrigger;CronTrigger主要用于处理quartz表达式定义的任务,比如每个月20号,每个星期一之类的。
      Scheduler:任务调度器, 计划执行者,现在我们有了要做的内容(jobdetail),有了要做的时间(trigger),接下来,就把这两个内容填充到计划任务Scheduler对象里面,到了时间它就可以自动运行了

    Example:

      

    public class MyJob implements Job{
    
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            System.out.println("测试quartz"+new Date());
        }
    
    
        //SimpleTrigger
        public static void simpleTrigger(){
    
            //获得schedulerFactory用来产生scheduler对象
            SchedulerFactory sf=new StdSchedulerFactory();
            Scheduler sche=null;
    
            //定义一个job,并绑定自己定义的MyJob类;利用反射实例化一个JobDetail类
            JobDetail jobDetail= JobBuilder.newJob(MyJob.class).withIdentity("test_job1","group1").build();
    
            //定义一个触发器
            Trigger trigger= TriggerBuilder.newTrigger().withIdentity("trigger_1","group1")
                    .startNow()
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInSeconds(5) //重复间隔
                            .withRepeatCount(5)) //重复次数
                    .build();
    
            try {
                //利用schedulerFactory产生scheduler对象
                sche=sf.getScheduler();
                //将jobDetail和trigger放入scheduler
                sche.scheduleJob(jobDetail,trigger);
                sche.start();
    
            } catch (SchedulerException e) {
                e.printStackTrace();
            }
            finally{
                try {
                    sche.shutdown(true);  //关闭调度
                } catch (SchedulerException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    二叉搜索树与双向链表
    TCP 三次握手与四次挥手
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
    栈的压入、弹出序列
    jenkins 持续集成和交付——一个构件小栗子前置(三)
    jenkins 持续集成和交付——gogs安装(外篇)
    jenkins 持续集成和交付——安装与账户安全还有凭证(二)
  • 原文地址:https://www.cnblogs.com/nww57/p/5192145.html
Copyright © 2011-2022 走看看