Quartz之使用案例

匿名 (未验证) 提交于 2019-12-02 23:03:14

一、任务调度的触发时机

1.每隔指定时间则触发一次

Quartz中对应的触发器为org.springframework.scheduling.quartz.SimpleTriggerBean

 

2.每到指定时间则触发一次

Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean

 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">      <property name="jobDetail" ref="job1" />      <!―每天12:00运行一次 ―>      <property name="cronExpression" value="0 0 12 * * ?" />  </bean> 

并非每种任务都可以使用这两种触发器,如java.util.TimerTask任务就只能使用第一种。Quartz和spring task都可以支持这两种触发条件。

二、Quartz作业类的继承方式

1.作业类继承自特定的基类

作业类继承于org.springframework.scheduling.quartz.QuartzJobBean

第一步:定义作业类

 import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean;  public class Job1 extends QuartzJobBean {  	private int timeout; 	private static int i = 0;  	// 调度工厂实例化后,经过timeout时间开始执行调度 	public void setTimeout(int timeout) { 		this.timeout = timeout; 	}  	/** 	 * 要调度的具体任务 	 */ 	@Override 	protected void executeInternal(JobExecutionContext context) throws JobExecutionException { 		System.out.println("定时任务执行中…"); 	} }

第二步:配置spring配置文件中作业类JobDetailBean 

 <bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">      <property name="jobClass" value="com.mark.Job1" /> <!--在java代码中定义的任务类-->     <property name="jobDataAsMap">         <map>             <entry key="timeout" value="0" /> <!--该任务类中需要注入的属性值-->        </map>      </property>  </bean> 

第三步:配置作业调度的触发方式(触发器)

SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次

 

第二种 CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次

 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">      <property name="jobDetail" ref="job1" />      <!―每天12:00运行一次 ―>      <property name="cronExpression" value="0 0 12 * * ?" />  </bean> 

 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">      <property name="triggers">          <list>              <ref bean="cronTrigger" /> <!--指定的就是之前配置的触发器的名字-->         </list>      </property>  </bean> 

2.作业类即普通的java类,不需要继承自任何基类(推荐)

spring支持的两种实现任务调度的方式

org.springframework.scheduling.timer.java自带timer task方式

org.springframework.scheduling.quartz.Quartz方式

第一步:编写任务类

 public class Job2 { 	public void doJob2() { 		System.out.println("不继承QuartzJobBean方式-调度进行中…"); 	} }

第二步:配置spring配置文件中作业类MethodInvokingJobDetailFactoryBean

 <bean id="job2"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">      <property name="targetObject">          <bean class="com.mark.Job2" />   <!--指定任务类-->     </property>      <property name="targetMethod" value="doJob2" />   <!--指定运行的方法-->     <property name="concurrent" value="false" />     <!-- 作业不并发调度 --> </bean> 

第三步:配置作业调度的触发方式(触发器)

SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次

 

第二种 CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次

 <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">      <property name="jobDetail" ref="job2" />      <!―每天12:00运行一次 ―>      <property name="cronExpression" value="0 0 12 * * ?" />  </bean> 

 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">      <property name="triggers">          <list>              <ref bean="cronTrigger" /> <!--指定的就是之前配置的触发器的名字-->         </list>      </property>  </bean> 
文章来源: Quartz之使用案例
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!