一、Quartz的特点
* 按作业类的继承方式来分,主要有以下两种:
1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式
2.作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类的方式
注:个人比较推崇第二种,因为这种方式下的作业类仍然是POJO。
* 按任务调度的触发时机来分,主要有以下两种:
1.每隔指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.SimpleTriggerBean
2.每到指定时间则触发一次,对应的调度器为org.springframework.scheduling.quartz.CronTriggerBean
注:这两种触发方式均可以跟两种作业继承方式相互组合来使用。
下面简单演示一下在Spring对Quartz的用法。
二、作业类继承org.springframework.scheduling.quartz.QuartzJobBean类,每到指定时间则触发一次
1.编写作业类
- package bean.jobDetailBean;
-
- 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;
-
-
- public void setTimeout(int timeout) {
- this.timeout = timeout;
- }
-
-
-
-
- @Override
- protected void executeInternal(JobExecutionContext context)
- throws JobExecutionException {
-
- System.out.println("继承QuartzJobBean的方式-调度" + ++i + "进行中...");
- }
- }
2.配置作业类
-
- <bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">
- <property name="jobClass" value="bean.jobDetailBean.Job1" />
- <property name="jobDataAsMap">
- <map>
- <entry key="timeout" value="0" />
- </map>
- </property>
- </bean>
3.配置作业调度的触发方式
-
- <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
- <property name="jobDetail" ref="job1" />
-
- <!--
- "cronExpression"的配置说明
-
- 字段 允许值 允许的特殊字符
- 秒 0-59 , - * /
- 分 0-59 , - * /
- 小时 0-23 , - * /
- 日期 1-31 , - * ? / L W C
- 月份 1-12 或者 JAN-DEC , - * /
- 星期 1-7 或者 SUN-SAT , - * ? / L C #
- 年(可选) 留空, 1970-2099 , - * /
-
- - 区间
- * 通配符
- ? 你不想设置那个字段
- -->
-
-
- <property name="cronExpression" value="0,10,20,30,40,50 * * * * ?" />
- </bean>
4.配置调度工厂
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="cronTrigger" />
- </list>
- </property>
- </bean>
5.开启调度
- package test;
-
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class ScheduleTest {
-
- public static void main(String[] args){
- <span style="white-space:pre"> </span>BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
- }
- }
三、作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类,每隔指定时间则触发一次
1.编写作业类
- package bean.jobDetailBean;
-
- public class Job2 {
-
- private static int i = 0;
-
- public void doJob2() {
- System.out.println("不继承QuartzJobBean方式-调度" + ++i + "进行中...");
- }
- }
2.配置作业类
- <bean id="job2"
- class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject">
- <bean class="bean.jobDetailBean.Job2" />
- </property>
- <property name="targetMethod" value="doJob2" />
- <property name="concurrent" value="false" />
- </bean>
3.配置作业调度的触发方式
- <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
- <property name="jobDetail" ref="job2" />
- <property name="startDelay" value="0" />
- <property name="repeatInterval" value="2000" />
- </bean>
4.配置调度工厂
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="simpleTrigger" />
- </list>
- </property>
- </bean>
5.开启调度
- package test;
-
- import org.springframework.beans.factory.BeanFactory;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class ScheduleTest {
-
- public static void main(String[] args){
-
- BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
- }
- }
简单说明Spring自带调度器的例子。