Spring||Quartz

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>

 

posted @ 2017-03-24 13:17  OKSSJ  阅读(378)  评论(0编辑  收藏  举报