[align=center][color=red][size=large][b]Quartz定时任务的实现及详解[/b][/size][/color][/align]
[color=blue][b]平常工作中经常遇到写定时任务的,这次做一次记录和解析分享给大家,共同学习进步,遇到写的不对的地方也请大家指教[/b][/color]
[color=darkblue][b]用例:比如每天凌晨我们要让系统定时执行一些耗费服务器的事情,或者其他的一些定时任务[/b][/color]
[color=darkblue][b]相关的jar包在附件,如有需要自行下载[/b][/color]
[color=red][b][size=large]1、[/size]首先怎么启动这个Quartz呢?
在项目启动的时候,让web.xml读取我们的定时器配置文件,如下所示[/b][/color]
[color=red][b][size=large]2、[/size]接着再来看一下我们的quartz.xml是怎么写的
,注释有点长,排版不是很清楚,可以直接拷贝在本地的xml查看,如下所示[/b][/color]
[color=red][b][size=large]3、[/size]最后就是我们具体的实现了,就是一个普通类[/b][/color]
[color=blue][b]平常工作中经常遇到写定时任务的,这次做一次记录和解析分享给大家,共同学习进步,遇到写的不对的地方也请大家指教[/b][/color]
[color=darkblue][b]用例:比如每天凌晨我们要让系统定时执行一些耗费服务器的事情,或者其他的一些定时任务[/b][/color]
[color=darkblue][b]相关的jar包在附件,如有需要自行下载[/b][/color]
[color=red][b][size=large]1、[/size]首先怎么启动这个Quartz呢?
在项目启动的时候,让web.xml读取我们的定时器配置文件,如下所示[/b][/color]
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/quartz.xml//是我们配置定时任务的文件
//...等等其他任务
</param-value>
[color=red][b][size=large]2、[/size]接着再来看一下我们的quartz.xml是怎么写的
,注释有点长,排版不是很清楚,可以直接拷贝在本地的xml查看,如下所示[/b][/color]
<?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>
[color=red][b][size=large]3、[/size]最后就是我们具体的实现了,就是一个普通类[/b][/color]
package com.xxx.db.quartz;
import com.fuiou.fwp.db.mapper.TUappOrderAcqMapper;
public class refreshCacheJob {
public void doSearch(){//具体的任务实现的方法
//
}
}