北大青鸟中博
邮箱:注册@zbaccp.com 登录
在线报名 | 成绩查询 | 中博南京校区 | 中博技术论坛 |
北大青鸟徐州中博大学生就业方案 在职、转行、待业人员就业方案 北大青鸟中博校区环境 徐州北大青鸟高中、中专、职高生就业解决方案
您的位置:新闻动态 - 行业新闻

Quartz官方文档汉化教程_002b
作者:张帅 出处:徐州中博 时间:2008-10-11
下载代码直接看结果先 去论坛下载代码http://bbs.zbaccp.com/viewthread.php?tid=7281&extra=page%3D1&frombbs=1
     如果对前面的代码你的理解还有些模糊,下面我们来具体研究2个类:
     JobDetail
      public JobDetail(String name,//作业名
                                String group,//组名
                                Class jobClass,//执行哪个作业
                                )
     SimpleTrigger
      public SimpleTrigger(String name,//触发器名称
                                        String group,//触发器所在组
                                        String jobName,//作业名
                                        String jobGroup,//作业所在组
                                        Date startTime,//触发器触发时间
                                        Date endTime,//触发器退出时间
                                        int repeatCount,//触发器反复出发次数,REPEAT_INDEFINITELY是无限循环
                                        long repeatInterval//每次触发的时间间隔(毫秒计)
                     )
   1.看第一个例子部分代码:
  // 所有的作业都可以在sched.start()被调用前调度
        // 获取下个15秒的开始,如当前是10秒,则在15秒执行,如实16秒,则在30秒执行
        // 如果不喜欢这个方法,自己定义一个Date也可以
        long ts = TriggerUtils.getNextGivenSecondDate(null, 15).getTime();

     
        
        // 作业3 将执行11次(运行1次然后重复多次)
        // 作业3 将每10秒执行一次(1000毫秒)
        JobDetail job = new JobDetail("作业3", "组1", SimpleJob.class);//定义作业
        SimpleTrigger trigger = new SimpleTrigger("触发器3", "组1", "作业3", "组1",
                new Date(ts), null, 10, 10000L);//定义触发器,在ts这个时间执行一次,然后每10秒执行一次,共11次
        Date ft = sched.scheduleJob(job, trigger);//将作业加入调度队列,等待调度启动
        log.info(job.getFullName() +
                " 将在时间: " + ft +  
                " 执行 并重复执行: " + trigger.getRepeatCount() +
                " 次, 每次间隔 " + trigger.getRepeatInterval() / 1000 + " 秒");
        
        // 还是刚才那个作业3,同样的作业将被另外一个触发器调度
        // 这次每70秒调度一次
        trigger = new SimpleTrigger("作业3", "组2", "作业3", "组1",
                new Date(ts), null, 2, 70000L);
        ft = sched.scheduleJob(trigger);
        log.info(job.getFullName() +
          " 将在时间: " + ft +  
                " 执行 并重复执行: " + trigger.getRepeatCount() +
                " 次, 每次间隔 " + trigger.getRepeatInterval() / 1000 + " 秒");
        
        log.info("------- 启动调度器 ----------------");
        
        sched.start();//调度器启动作业,相当于神舟7号准备就绪了,具体什么时候飞天,还得看何时点火

   2.看第二个例子部分代码
     // 所有的作业都可以在sched.start()被调用前调度
        // 获取下个15秒的开始,如当前是10秒,则在15秒执行,如实16秒,则在30秒执行
        // 如果不喜欢这个方法,自己定义一个Date也可以
        long ts = TriggerUtils.getNextGivenSecondDate(null, 15).getTime();

     
        
        // 作业4 将执行6次(运行1次然后反复执行5次)
        // 作业4 每10秒执行1次(1000毫秒)
        JobDetail job = new JobDetail("作业4", "组1", SimpleJob.class);
        SimpleTrigger trigger = new SimpleTrigger("触发器4", "组1", "作业4", "组1",
                new Date(ts), null, 5, 10000L);
        Date ft = sched.scheduleJob(job, trigger);
        log.info(job.getFullName() +
          " 将在时间: " + ft +  
                " 执行 并重复执行: " + trigger.getRepeatCount() +
                " 次, 每次间隔 " + trigger.getRepeatInterval() / 1000 + " 秒");

        // 作业5 将执行1次,在"ts"这个时间后1分钟执行(60秒之后)
        job = new JobDetail("作业5", "组1", SimpleJob.class);
        trigger = new SimpleTrigger("触发器5", "组1", "作业5", "组1",
                new Date(ts + 60000), null, 0, 0);
        ft = sched.scheduleJob(job, trigger);
        log.info(job.getFullName() +
          " 将在时间: " + ft +  
                " 执行 并重复执行: " + trigger.getRepeatCount() +
                " 次, 每次间隔 " + trigger.getRepeatInterval() / 1000 + " 秒");

        // 作业6 将每50秒执行一次
        job = new JobDetail("作业6", "组1", SimpleJob.class);
        trigger = new SimpleTrigger("触发器6", "组1", "作业6", "组1",
                new Date(ts), null, SimpleTrigger.REPEAT_INDEFINITELY, 50000L);
        ft = sched.scheduleJob(job, trigger);
        log.info(job.getFullName() +
          " 将在时间: " + ft +  
                " 执行 并重复执行: " + trigger.getRepeatCount() +
                " 次, 每次间隔 " + trigger.getRepeatInterval() / 1000 + " 秒");

        log.info("------- 启动调度器 ----------------");
        
        
        sched.start();//调度器启动作业,相当于神舟7号准备就绪了,具体什么时候飞天,还得看何时点火

  3.看第三个例子部分代码,之前的代码都是在start()方法调用前就已经作业准备就绪,这个不一样,start()调用后依然可以加入新的作业,已经调度好的作业也可以修改。
   // 所有的作业都可以在sched.start()被调用前调度
        // 获取下个15秒的开始,如当前是10秒,则在15秒执行,如实16秒,则在30秒执行
        // 如果不喜欢这个方法,自己定义一个Date也可以
        long ts = TriggerUtils.getNextGivenSecondDate(null, 15).getTime();

        log.info("------- 启动调度器 ----------------");
        
        
        sched.start();//调度器启动作业,相当于神舟7号准备就绪了,具体什么时候飞天,还得看何时点火
        
        
        // 作业也可以在start() 方法被调用后加入调度队列
        // 作业7将会重复20次,每次间隔1分钟
        JobDetail job = new JobDetail("作业7", "组1", SimpleJob.class);
        SimpleTrigger trigger = new SimpleTrigger("触发器7", "组1", "作业7", "组1",
                new Date(ts), null, 20, 60*1000L);
        Date ft = sched.scheduleJob(job, trigger);
        log.info(job.getFullName() +
          " 将在时间: " + ft +  
                " 执行 并重复执行: " + trigger.getRepeatCount() +
                " 次, 每次间隔 " + trigger.getRepeatInterval() / 1000 + " 秒");
        
        // 作业也可以直接被触发调用,不必设置专门的触发器调用
        job = new JobDetail("作业8", "组1", SimpleJob.class);
        job.setDurability(true);
        sched.addJob(job, true);
        log.info("'人工' 触发 作业8...");
        sched.triggerJob("作业8", "组1");

        log.info("------- 等待 30 秒... --------------");
        try {
            // 等待30秒看结果
            Thread.sleep(30L * 1000L);
            // 执行...
        } catch (Exception e) {
        }

        // 作业可以被重新设置调度的时间及调度形式,前面的设置失效
        // 作业7将立即执行并每秒1次反复执行10次
        log.info("------- 调度开始... --------------------");
        trigger = new SimpleTrigger("触发器7", "组1", "作业7", "组1",
                new Date(), null, 10, 1000L);
        ft = sched.rescheduleJob("触发器7", "组1", trigger);
        log.info("作业7将在时间:  " + ft+" 执行");
        
        
        log.info("------- 等待5分钟... ------------");
        try {
            // 等待5分钟来看作业执行
            Thread.sleep(1000*60*5);
            // 执行中...
        } catch (Exception e) {
        }

        log.info("------- 关闭调度器 ---------------------");

>>更多新闻

前一篇:Quartz官方文档汉化教程_002a

 
在线咨询  
黄老师 陆老师
韩老师 值班老师
中心简介
校区简介
校区环境
关于北大青鸟
特色优势
常见问题解答
 
 
ACCP软件工程师课程
什么是ACCP
ACCP5.0课程介绍
各课程定位与特色
各阶段课程
教学模式
ACCP5.0课程体系
ACCP认证证书
 
 
北大青鸟全国免费服务电话:800-828-5191(电信用户使用)
  徐州北大青鸟报名咨询电话:0516 - 85628888 85629999 黄老师 陆老师
地址:徐州市解放南路181科技培训中心(六中对面)
乘车路线:11、19、20、65、39、60、51、64、609、游1、游2至和平路六中站下 苏ICP备08102142号