Quartz

1、导入jar包

 2、写一个POJO,也就是一个普通java类,方法名任意   

public class MyJob {

	public void send() {
		System.out.println("任务执行完成了:"+new Date());
	}
	
}

3、配置一下此POJO的bean以及调度Quartz和spring整合的bean 

	 <!-- 定义一个任务 -->
   <bean id="myJob" class="com.cb.job.MyJob"></bean>
   
   <!-- 定义一个MethodInvoingJobDetailFactoryBean -->
   <bean id="methodInvokingJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject" ref="myJob"></property>
       <property name="targetMethod" value="send"></property>
   </bean>
   
   <!-- 指定时间 -->
   <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
          <property name="jobDetail" ref="methodInvokingJob"></property>
          <property name="cronExpression" value="0/1 * * * * ? *"></property>
   </bean>
   
   <!-- 指定一个总调度器 -->
   <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
      <property name="triggers">
          <list>
              <ref bean="cronTrigger"></ref>
          </list>
      </property>
   </bean>
	

配置说明: 

1、org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean类为指定哪个pojo为调度类,此类中哪个方法需要执行,这些都通过属性注入:

                <property name="targetObject" ref="myJob"></property>,targetObject为指定哪个bean为调度类

                <property name="targetMethod" value="send"></property>,为指定此POJO中哪个方法需要进行调度

2、org.springframework.scheduling.quartz.CronTriggerFactoryBean配置调度执行时机,一般是通过指定表达式来决定

               <property name="jobDetail" ref="methodInvokingJob"></property>,为指定需要配置哪个调度

              <property name="cronExpression" value="0/1 * * * * ? *"></property>,为配置调度触发的表达式,依次是 秒 分 钟 时 日 月 周 年 ,反正周和日两个不能同时为*,得有一个为?,这个框架这么规定的

3、org.springframework.scheduling.quartz.SchedulerFactoryBean类为总的触发调度器,其可以配置多个调度,通过list集合注入,可以配置多个任务

          <list>
              <ref bean="cronTrigger"></ref>
          </list>

quartz组件的难点就是在调度时间配置上,采用cron表达式,配置详解如下:

cron表达式由7个部分构成:由年周月日时分秒这个7个单位构成,最前面是秒,依次类推,个单位之间以空格隔开,其中年为非必须构成,其他6个是必须的,如* 30 17 * * ?代表每天1730分触发一次调度,其中?号只能日和周,与* 一样代表任意

同一单位触发两次以逗号分割,如 * 10,20 * * * ?代表每第10分钟和第20分钟的时候触发一次 ,是一个或的意思

斜杠/代表递增,如0/5 代表从0开始,每5秒触发一次

-代表范围,如3-8代表345678秒触发依次,只能3-8顺序执行,不能8-3倒叙执行,跟时钟摆针一样,只能正着走,不能倒着走

字母L只能放在日和周上,代表最后,放在日上代表在本月的最后一天,放周上其实也就是周六,周是从周日1-周六7结束

W代表工作日,只能用在日上,如果刚好是周六日,那么以最近的上下浮动一天到工作日,如周六的话,就提前到周五,如果周日的话,那么顺延到周一上班再触发

如果不懂表达式的话,可以到网上用cron在线生成器自动来生成

http://cron.qqe2.com/ 

原文地址:https://www.cnblogs.com/javabg/p/7354660.html