项目中有模块依赖到了Quartz来做定时任务。那天和大师研究了一下午,讲一个使用这个工具的一些收获。
首先,用的不是原先的Quartz,而是与spring整合的。需要用到Spring-Conte-Support-4.2.3.Release.jar,Quartz-2.2.2.jar。使用的方式如下
<pre name="code" class="html"><pre name="code" class="html"><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<beans>
<!-- 定时清理 MessageRelation和hadsend Map 1 -->
<bean id="clearRelationJob" class="com.yicong.kisp.job.ClearRelationAndHadsendJob"/>
<!-- JobDetajil,基于MethodInvokingJobDetailFactoryBean调用普通Spring Bean 2 -->
<bean id="clearRelationJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="clearRelationJob"/>
<property name="targetMethod" value="doClear"/>
<!-- 同一任务在前一次执行未完成而Trigger时间又到时是否并发开始新的执行, 默认为true. -->
<property name="concurrent" value="false"/>
</bean>
<!-- Cron式Trigger定义 3 -->
<bean id="clearRelationJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="clearRelationJobDetail"/>
<property name="misfireInstruction" value="2"/>
<!-- 全年、周2,4,6、00:01:01 -->
<property name="cronExpression" value="1 1 0 ? 1-12 2,4,6 *"/>
<!-- 延迟10秒启动 -->
<property name="startDelay" value="10000"/>
</bean>
<!-- 调度器 4 -->
<bean id="schedulerFactoryBean" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
&l