1.what's Quartz
开源级别的任务调度服务,即在特定的时间执行操作,Spring以声明的方式配置计划任务,以"任务调度"为核心主要分为任务,触发器以及调度器
1.任务
Quartz提供Job来支持任务定义
publc interface Job{ void execute(JobExcutionContext context)throws JobExecutionException; } //Quartz每次执行job时,会为job创建一个实力,JobDetil为实现类,允许对Job进行分组
2.触发器
Trigger类负责定义Job执行的时间触发规则,有两个实现类SimpleTrigger和CronTrigger,为应对不同的场景所支持。
3.调度器
Schedular类为独立的容器,Trigger和Jobdetail注册到Schedular中,定义多个接口方法,允许通过组及名称访问容器中的Trigger和Jobdetail
2.execute Trigger Mission
Quartz具有以下包
通过JobDetail的JobDataMap对象进行初始化处理,
SimpleTrigger
用于处理固定时间间隔调度任务 ,通过设置触发器属性
CronTrigger
指定时间点的调度任务,通过Cron表达式
表达式范围
example: 1 2 3 4 5 6 7
秒,分,时,月份中的每一天,月份,星期几,年份
0-59,0-59,0~23,1-31,1~12或者JAN~DEC,1~7OR SUN~SAT,1970~2099
* /,*/,*/,*/,*/?L,*/,*/?L,*/
-------------------------------desciption
-:表示一个范围
*:表示每个值
,:间隔范围
?:表示月份中的哪一天
/:x/y x=>init ,y=>增量
L:最后一天
Calendar
计算间隔
interface Calendar extends Serializable,Clonable{ boolean isTimeIncluding(long timeStamp); long getNextInincluding(long timeStamp); }
包含了以下实现类
WeeklyCalendar 用于排除星期中的一天或多天
MonthlyCalendar 排除月份中的数天
AnnualCalendar 用于排除年份中的一天或者多天
HolidayCalendar 排除节假日
//Calendar AnnualCalendar cal =new AnnualCalendar(); Calendar mycal = GregorianCalendar.getInstance(); mycal.set(Calendar.MONTH,Calendar.JUNY); mycal.set(Calendar.DATE,1); cal.setDayExeclued(mycal,true) //registry //get connection
Quartz For Spring
通过JobExecutionContext从JobDataMap中读取数据,Spring提供了QuartzJobBean类,实现了Job接口,通过executeInternal()方法定义预定的时刻计划任务,
class RemindJob extends QuartzJobBean{ //通过JobDetail描述Job信息. @Override void executionInternal (JobExecutionContext jobContext)throws JobExecutionException{ .... } }
执行2次 <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <!--指定触发器关联的作业--> <property name="jobDetail"> <ref bean="weekJobDetailFactoryBean"/> </property> <!--延迟10s--> <property name="startDelay"> <value>10000</value> </property> <!--每60s启动一次--> <property name="repeatInterval"> <value>60000</value> </property> <!--重复一次--> <property name="repeatCount"> <value>1</value> </property> </bean> 执行1次:
CronTriggerBeanForSpring
Spring 提供了CronTriggerBean来精确定义规则,
<config cron>
<bean name="" class="org.springframework.scheduling.quartz.CronTriiggerBean">
<!--config cron-->
<proprty name=""cronExpression" value="0 30 9 ? * MON-FRI">
</bean>