Quartz定时任务的实现及详解

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(){//具体的任务实现的方法
		//
	}
}

猜你喜欢

转载自patronli.iteye.com/blog/2326032