Spring+Quartz实现定时任务的配置实例


背景:项目要求BSS系统与ESOP系统定期进行信息同步,需要启动定时任务。这里简单的运用Spring+Quartz实现定时任务。


以下以信息同步中的集团信息同步简单介绍:

服务类型 自动服务名称 所属模块 每天开始执行时间 每天结束执行时间 执行频率 每次执行耗时
信息同步 组织架构 IAP接口 0:00:00 1:59:59 1天 30分钟
人员信息 IAP接口 0:00:00 1:59:59 1天 30分钟
集团信息 ESOP接口 2:00:00 2:59:59 1天 30分钟
代理商信息 ESOP接口 2:00:00 2:59:59 1天 30分钟
ESOP工单状态 ESOP接口 0:00:00 23:59:59 5分钟 5分钟

集团信息要求每天凌晨2点执行。


具体的步骤如下:
1 编写业务类,该类继承了org.springframework.scheduling.quartz.QuartzJobBean,主要的逻辑在executeInternal方法中编写

2 配置spring的applicationContext.xml文件
    2.1 配置任务   JobDetailBean
    2.2配置触发器  CronTriggerBean
    2.3配置调度器  SchedulerFactoryBean

3 所需要的jar包:
         spring.jar,quartz.jar,commons-logging-1.0.4.jar,commons-dbcp-1.2.2.jar,commons-pool-1.3.jar

4 把quartz.properties放到src类路径下


(一)定义具体的任务调度类

package com.congxing.task.ESOP;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
/**
 * 集团信息同步任务
 * @author Administrator
 *
 */
public class GroupCustomerJob extends QuartzJobBean {

	@Override
	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException {
		// TODO Auto-generated method stub
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		System.out.println("集团客户信息同步ing..执行时间:"+df.format(new Date()));// new Date()为获取当前系统时间
		//TODO
	}
}

(二)Spring配置


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	   							http://www.springframework.org/schema/beans/spring-beans-3.0.xsd	    
	                            http://www.springframework.org/schema/tx 
	                            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
	                            http://www.springframework.org/schema/jee 
	                            http://www.springframework.org/schema/jee/spring-jee-3.0.xsd 
	                            http://www.springframework.org/schema/context 
	                            http://www.springframework.org/schema/context/spring-context-3.0.xsd
	                            http://cxf.apache.org/jaxws 
                                http://cxf.apache.org/schemas/jaxws.xsd">


	<!-- 集团信息 同步任务 -->
	<bean id="groupCustomerJob"
		class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.congxing.task.ESOP.GroupCustomerJob" />
	</bean>

	<!-- 集团信息 同步触发器 -->
	<bean id="groupCustomerTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="groupCustomerJob"/>
		<property name="startDelay" value="10000" />
		<!-- Cron表达式:每天凌晨2点执行一次-->
		<property name="cronExpression">
			<value>0 0 2 * * ?</value>
		</property>
	</bean>

	<!-- 任务调度器 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
	<bean id="startQuertz" lazy-init="false" autowire="no"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="transactionManager" ref="transactionManager" />
		<property name="triggers">
			<list>
				<ref bean="groupCustomerTrigger" />
			</list>
		</property>
		<property name="quartzProperties">
			<map>
				<entry key="org.quartz.threadPool.threadCount" value="1"/>
			</map>
		</property>
	</bean>
</beans>


(四)  quartz.properties文件

#============================================================================
# Configure Main Scheduler Properties  
#============================================================================
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

#============================================================================
# Configure ThreadPool  
#============================================================================
#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 5
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#============================================================================
# Configure JobStore  
#============================================================================
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.misfireThreshold = 60000
#org.quartz.jobStore.useProperties = false
#org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.dataSource = myDS

#org.quartz.jobStore.isClustered = true
#org.quartz.jobStore.clusterCheckinInterval = 15000

#============================================================================
# Configure DataSource
#============================================================================
#org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
#org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost/test
#org.quartz.dataSource.myDS.user = root
#org.quartz.dataSource.myDS.password = root
#org.quartz.dataSource.myDS.maxConnections =10


附录说明:


说明:

         1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。

               字段名                 允许的值                        允许的特殊字符  

               秒                         0-59                               , - * /  

               分                         0-59                               , - * /  

               小时                   0-23                               , - * /  

               日                         1-31                               , - * ? / L W C  

               月                         1-12 or JAN-DEC          , - * /  

               周几                     1-7 or SUN-SAT            , - * ? / L C #  

               年 (可选字段)     empty, 1970-2099      , - * /

               “?”字符:表示不确定的值

               “,”字符:指定数个值

               “-”字符:指定一个值的范围

               “/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m

               “L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X

               “W”字符:指定离给定日期最近的工作日(周一到周五)

               “#”字符:表示该月第几个周X。6#3表示该月第3个周五

         2)Cron表达式范例:

                 每隔5秒执行一次:*/5 * * * * ?

                 每隔1分钟执行一次:0 */1 * * * ?

                 每天23点执行一次:0 0 23 * * ?

                 每天凌晨1点执行一次:0 0 1 * * ?

                 每月1号凌晨1点执行一次:0 0 1 1 * ?

                 每月最后一天23点执行一次:0 0 23 L * ?

                 每周星期天凌晨1点实行一次:0 0 1 ? * L

                 在26分、29分、33分执行一次:0 26,29,33 * * * ?

                 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?




你可能感兴趣的:(spring,quartz)