spring中集成了定时器功能,使用到了类:org.springframework.scheduling.quartz.SchedulerFactoryBean,org.springframework.scheduling.quartz.CronTriggerBean,
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean,以及你自己需要实现的执行任务的类。
第一个类【org.springframework.scheduling.quartz.SchedulerFactoryBean】:
正像其名称指出的一样,它是调度工厂Bean,在该工厂中,放置所有需要调度的【CronTriggerBean】的对象。
该类一般只使用一个参数:triggers,该参数可配置成为list,也可只注入单一trigger。
比如:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <ref local="numCountSchedule"/> </property> </bean>
第二个类【org.springframework.scheduling.quartz.CronTriggerBean】:
该类包含了两部分:1、“执行类”的细节。2、“执行类”的时间安排。
1、执行类的细节被封装在【MethodInvokingJobDetailFactoryBean】中,因此,该类第一个参数jobDetail即为一个MethodInvokingJobDetailFactoryBean对象。
2、执行类的时间安排使用了cronExpression表达式。
比如:
<bean id="numCountSchedule" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="numCountDetail"/> </property> <property name="cronExpression"> <value>0/2 * 15 * * ? 2014</value> </property> </bean>
第三个类【org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean】:
该类包含了跟“执行类”相关的两部分:1、targetObject 2、targetMethod。
1、targetObject 即为一个“执行类”对象。本例中执行对象即为第四个类中xml配置的<bean>id。
2、targetMethod则是该执行对象的执行方法。
比如:
<bean id="numCountDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="numCount"/> </property> <property name="targetMethod"> <value>count</value> </property> </bean>
第四个类即为自己写的执行类,执行具体的工作。
XML:
<bean id="numCount" class="com.hunter.HunterCount"> <!-- <property name="initNum"> <value>2</value> </property> --> </bean>
对应代码:
package com.hunter; import java.io.File; import org.springframework.context.support.ClassPathXmlApplicationContext; public class HunterCount { /** * @param args */ public void count(){ System.out.println("count:"+3); } public static void main(String[] args){ new ClassPathXmlApplicationContext("./applicationContext-crawl.xml"); } }
主函数可以不要。为了方便单机测试,使用了spring的xml加载方式。
本篇的所有例子组合起来即为一个成功的调度。