quartz官网地址:
- http://quartz-scheduler.org/
官网下载压缩包结构:
- src文件夹下为源码
- lib文件夹下为依赖 jar,包含quartz.jar
- javadoc文件夹下为参考API
quartz基础简介:
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
quartz基本结构:
- 任务调度器Scheduler、作业job、触发器Trigger、任务分配、任务控制、任务存储
quartz简单实现:
- 作业Job:
package org.quartz; import java.util.Date; import org.apache.log4j.Logger; public class QuartzJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { /* * jobExecutionContext获取对象的两种方式 * jobExecutionContext.getJobDetail().getJobDataMap().getString(key, value); * jobExecutionContext.getScheduler().getContext().get(key, value); */ Logger logger = Logger.getLogger(QuartzJob.class); logger.info("测试"+new Date(System.currentTimeMillis())); } }
- 任务调度:
package org.quartz; import java.util.Date; import org.quartz.impl.StdSchedulerFactory; /** * <p>Title:Quartz实现</p> * <p>Description:暂无</p> * @author Jerry * @version 2014-10-11 10:02:08 */ public class SimpleQuartz { public static void main(String[] args) { Scheduler scheduler = null; try{ //①创建一个JobDetail实例,指定任务名称、组、任务的class实例 JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity("firstJob", "firstGroup").build(); /** * 通过jobDetail的JobDataMap存储String等(序列化对象): * jobDetail.getJobDataMap().put(key, value); */ /** * *********************************************************** * 位置 时间域名 允许值 允许的特殊字符 * 1 秒 0-59 - * , / * 2 分钟 0-59 - * , / * 3 小时 0-23 - * , / * 4 日期 1-31 - * , / ? L W C * 5 月份 1-12 - * , / * 6 星期 1-7 - * , / ? L C # * 7 年(可选) 空值1970-2099 - * , / * *********************************************************** * 减号(-) 表示一个范围. * 星号(*) 可用在所有字段中,表示对应时间域的每一个时刻. * 逗号(,) 表示一个列表值,比如在日期字段中使用1、4、5,则表示星期一,星期四,星期五. * 斜杠(/) x/y x为起始值,y为增长值. * 问号(?) 该字符只在日期和星期字段中使用,它通常指定为无意义的值,相当于占位符. * 字母(L) 在日期中表示这个月的最后一天,在星期中表示星期六. * 字母(W) 表示离该日期最近的工作日;注意:不能够跨月,如指定1W,如果1号是星期六,结果匹配的是3号的星期一. * 字母(C) 计划所关联的日期,如果没有被关联,相当于所有日期;5C在日期中相当于5日以后的第一天,1C相当于星期日后的第一天. * 井号(#) 表示当月的某个工作日 如 6#3表示当月的第3个星期5 * 字母组合(LW) 当月的最后一个工作日. * *********************************************************** */ //②创建Cron表达式实例,指定日期。 CronExpression cexp=new CronExpression("0 0 15 * * ? *"); //③创建一个SimpleTrigger实例,指定名称、开始时间。 Trigger trigger = (Trigger) TriggerBuilder.newTrigger() .withIdentity("firstTrigger", "firstGroup") .withSchedule(CronScheduleBuilder.cronSchedule(cexp)) .startAt(new Date()) .build(); //④通过SchedulerFactory获取一个调度器实例 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); scheduler = schedulerFactory.getScheduler(); //⑤注册并进行调度 scheduler.scheduleJob(jobDetail, trigger); /** * 通过scheduler的context存储任何对象: * scheduler.getContext().put(key, value); */ scheduler.start(); }catch (Exception e){ e.printStackTrace(); }finally{ } } }
github地址:
https://github.com/710270532/quartz
声明:
示例中的创建实例方法为quartz2.2.1版本,每个版本创建实例方法会略有变化,所以还是建议参考javadoc文件夹下的API和quartz的官网document的example。