设为首页    加入收藏
                 
徐州北大青鸟高中、中专、职高生就业解决方案 在职、转行、待业人员就业方案 北大青鸟中博校区环境 徐州中博大学生就业方案 校区周边环境
您的位置:首页 - 编程技巧   

quartz官方文档汉化教程_008
作者:中博IT教育 出处:中博IT教育 时间:2011-03-21
quartz官方文档汉化教程_008

    

    懒人兄弟们,直接下载代码了,哈哈哈……

    接上篇正题。

    本范例演示如何使用日历来排除一些时间,在这些被排除的时间里排程任务不运行。

    本例任务预设定运行的开始日期为103110点整,但是该日期被日历排除了,所以实际的运行时间是111的凌晨。

 

1.         SimpleJob.java

package com.zbaccp.quartz.cl.example8;

 

import java.util.Date;

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

 

/**

 * 一个普通的任务,仅仅要求能够运行

 *

 * @author 常磊

 */

public class SimpleJob implements Job {

 

       private static Log _log = LogFactory.getLog(SimpleJob.class);

 

       public SimpleJob() {

       }

 

       /**

        * 任务体,仅仅是打印任务名和运行的时刻

        */

       public void execute(JobExecutionContext context)

                     throws JobExecutionException {

 

              String jobName = context.getJobDetail().getFullName();

              _log.info("简单任务说话了: " + jobName + " 运行时刻: " + new Date());

       }

}

 

2.         CalendarExample.java

package com.zbaccp.quartz.cl.example8;

 

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

 

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.SchedulerMetaData;

import org.quartz.SimpleTrigger;

import org.quartz.TriggerUtils;

import org.quartz.impl.StdSchedulerFactory;

import org.quartz.impl.calendar.AnnualCalendar;

import org.apache.commons.logging.LogFactory;

import org.apache.commons.logging.Log;

 

/**

 * 本范例演示如何使用日历来排除一些时间,在这些排除的时间里排程任务不应当运行

 *

 *  @author 常磊

 */

public class CalendarExample {

 

    public void run() throws Exception {

        final Log log = LogFactory.getLog(CalendarExample.class);

 

        log.info("------- 开始初始化 ----------------------");

 

        //1 排程实例化

        SchedulerFactory sf = new StdSchedulerFactory();

        Scheduler sched = sf.getScheduler();

 

        log.info("------- 初始化结束 -----------");

 

        log.info("------- 安排任务 -------------------");

 

        //2 把假期日历加入排程,日历中的日期都被排除

        AnnualCalendar holidays = new AnnualCalendar();

 

        //2.1 74 (独立日,没有想到这个俺也知道,看美国大片看的!有才,呵呵 )

        Calendar fourthOfJuly = new GregorianCalendar(2005, 6, 4);

        holidays.setDayExcluded(fourthOfJuly, true);

        //2.2 1031,万圣节前夕

        Calendar halloween = new GregorianCalendar(2005, 9, 31);

        holidays.setDayExcluded(halloween, true);

        //2.3 1225christmas

        Calendar christmas = new GregorianCalendar(2005, 11, 25);

        holidays.setDayExcluded(christmas, true);

 

        //2.4 将日历与加入排程

        sched.addCalendar("holidays", holidays, false, false);

       

        //3 任务每1小时执行一次,开始于万圣节前夕上午10

        //3.1 注意参数列表getDateOf(second,minute,hour,dayOfMonth,month)

        Date runDate = TriggerUtils.getDateOf(0,0, 10, 31, 10);

        JobDetail job = new JobDetail("job1", "group1", SimpleJob.class);

        SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1",

                runDate,

                null,

                SimpleTrigger.REPEAT_INDEFINITELY,

                60L * 60L * 1000L);

       

        //3.2 触发器与排程中的日历关联

        trigger.setCalendarName("holidays");

       

        Date firstRunTime = sched.scheduleJob(job, trigger);

       

        //3.3 打印job第一次运行的时间

        //然而这个时间是万圣节前夕上午10点吗?

        //想一想,前面我们已经把这一天排除了,哦,大家想起来了

        //所以实际的运行时间是111的凌晨

        log.info(job.getFullName() +

                " 初次运行时刻: " + firstRunTime + 

                " 重复: " + trigger.getRepeatCount() +

                " , 运行间隔 " + trigger.getRepeatInterval() / 1000 + " ");

       

        //4 启动排程

        log.info("------- 启动排程 ----------------");

        sched.start();

 

        //5 任务只会在1031后的整点运行,所以嘛遇到的几率并不是很大

        // 只好调计算机时间了

        log.info("------- 请等待30秒钟... --------------");

        try {

            Thread.sleep(30L * 1000L);

        } catch (Exception e) {

        }

          

        //6 关闭排程

        log.info("------- 开始关闭 ---------------------");

        sched.shutdown(true);

        log.info("------- 关闭结束 -----------------");

 

        SchedulerMetaData metaData = sched.getMetaData();

        log.info("共执行工作 " + metaData.numJobsExecuted() + " ");

 

    }

 

    public static void main(String[] args) throws Exception {

 

        CalendarExample example = new CalendarExample();

        example.run();

    }

 

}

 

3.         执行结果的分析

a)        不要混淆了 Quartz Calendar 对象与 Java API java.util.Calendar。它们是应用于不同目的不一样的组件。

b)        Java Calender 对象是通用的日期和时间工具;许多过去由 Java Date 类提供的功能现在加到了 Calendar 类中了。

c)         Quartz Calender 专门用于屏闭一个时间区间,使 Trigger 在这个区间中不被触发。例如,让我们假如你是为一个财务机构(如银行)工作。对于银行普遍的许多 "银行节日"。假设你不需要(或不想) Job 在那些日子里运行。你可以采用Quartz Calendar来实现

d)        要使用 Quartz Calendar,你只需实例化,并加入你要排除的日期,然后用 Scheduler 注册它。最后把这个 Calender 实例与你想要使用该 Calender 的每一个 Trigger 实例关联起来。

文件下载:quartzOfficial8.rar  

>>更多新闻
相关新闻
quartz官方文档汉化教程_013 quartz官方文档汉化教程_013
quartz官方文档汉化教程_014 quartz官方文档汉化教程_014
微软宣布SQL Server 2008 R2已进入RTM阶段 微软宣布SQL Server 2008 R2已进入RTM阶段
quartz官方文档汉化教程_012 quartz官方文档汉化教程_012
quartz官方文档汉化教程_011 quartz官方文档汉化教程_011
 
在线报名
  • 姓     名:*
  • Q       Q:*
  • 电     话:*
  • 地     址:*
在线咨询  
中心简介
校区简介
校区环境
关于北大青鸟
特色优势
常见问题解答
网站地图
 
ACCP5.0 课程咨询
ACCP软件工程师课程
什么是ACCP
ACCP5.0课程介绍
各课程定位与特色
各阶段课程
教学模式
ACCP5.0课程体系
ACCP认证证书
 
中博教育客服在线
©徐州北大青鸟 隐私政策
学费咨询
学历咨询
专业咨询
订座试听
就业咨询
课程咨询
测试认证
软件认证