Quartz

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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值