Quartz定时任务的实现及详解
平常工作中经常遇到写定时任务的,这次做一次记录和解析分享给大家,共同学习进步,遇到写的不对的地方也请大家指教
用例:比如每天凌晨我们要让系统定时执行一些耗费服务器的事情,或者其他的一些定时任务
相关的jar包在附件,如有需要自行下载
1、首先怎么启动这个Quartz呢?
在项目启动的时候,让web.xml读取我们的定时器配置文件,如下所示
<param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/config/quartz.xml//是我们配置定时任务的文件 //...等等其他任务 </param-value>
2、接着再来看一下我们的quartz.xml是怎么写的
,注释有点长,排版不是很清楚,可以直接拷贝在本地的xml查看,如下所示
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> //<!-- 时间调度属性配置文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>WEB-INF/config/quartz.properties</value><!--如果定时任务较多,可以在这里开辟一个配置文件来统一管理时间--> </list> </property> </bean> //<!--如果targetObject中引用的类在struts.xml或者其他地方没有配置的时候可以在本xml配置,就像这样--> <!--<bean id="refreshCacheJob" class="com.xxx.web.job.impl.refreshCacheJob"></bean>--> <bean id="mobileSearchJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="refreshCacheJob"/> //<!--目标对象(任务要在哪个类中执行,可以直接在ref里面引用配置文件中的别名)--> <property name="targetMethod" value="execute"/> //<!--要执行目标对象里的什么方法--> <property name="concurrent" value="false"/> //<!--concurrent==false 任务不并行(即当第一个任务还没有执行完,此时第二个任务触发要等到第一个执行完毕才会执行第二个)--> </bean> <bean id="mobileSearchTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> //<!--有corn与simple触发器两种--> <property name="jobDetail" ref="mobileSearchJob"/> //<!--要触发的任务--> <property name="cronExpression" value="${mobileReset_time}"/> //<!-- corn表达式(引用型)每隔3分钟触发一次 --> <!-- <property name="cronExpression" <value>0 0 2 * * ?</value>/>-->//<!--直接corn表达式的值--> </bean> //<!-- 控制器类 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="mobileSearchTrigger" /> //..引用其他的定时任务 </list> </property> </bean> </beans>
3、最后就是我们具体的实现了,就是一个普通类
package com.xxx.db.quartz; import com.fuiou.fwp.db.mapper.TUappOrderAcqMapper; public class refreshCacheJob { public void doSearch(){//具体的任务实现的方法 // } }