Spring环境下实现定时执行任务

来源:互联网 发布:区域生长 分割算法 编辑:程序博客网 时间:2024/06/05 17:59

经常有遇到需要定时同步数据的需求,现在分享下Spring框架下使用quartz插件实现定时执行程序的方法。

  1. 首先,要准备的是quartz插件的架包,我测试的版本是:quartz-all-1.6.6.jar

                 没有架包可点击以下链接下载:

                         quartz架包下载

  2. 创建定时任务所需的配置文件,以“quartzConfig.xml”为例
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans><!-- 设置定时任务 --><bean name="customerAction" class="com.xxx.CustomerAction"/><bean id="quartzDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  <property name="targetObject">   <ref bean="customerAction" /><!-- 指向启动方法所在的类 -->  </property>  <property name="targetMethod">   <value>synCustomer</value><!-- 需执行的方法 -->  </property>  <property name="concurrent" value="false" /> </bean>  <!-- 创建定时器 --><bean id="triggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean"><property name="jobDetail" ref="quartzDetail" /><!-- 每天2:00调用一次 --><property name="cronExpression" value="0 0 2 * * ?" /></bean><!-- 启动定义的定时器 --><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="triggerBean" /></list></property></bean></beans>

                此处调用的是com.xxx.CustomerAction类中的synCustomer方法,此方法无参数传递。

                定时时间的格式为:[秒] [分] [小时] [日] [月] [周] [年]

                '*' 表示所有值,'?' 表示不指定值,'-' 表示区间,','表示指定多个值。

                提供几个例子:

                0 15 10 * * ? 2005  2005年每天10点15分触发

                0 15 10 ? * MON-FRI  从周一到周五每天上午的10点15分触发

                0 0 12 1/5 * ?  每月的第一个中午开始每隔5天触发一次

                0 11 11 11 11 ?  每年的11月11号 11点11分触发(光棍节)

  3. web.xml中配置加载quartzConfig.xml和监听
    <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:quartzConfig.xml</param-value></context-param>

    <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

可能会出现的问题,定时时间到时执行2次或多次所指定的方法

造成的原因可能是,在其他配置文件中有重复加载监听,或者是tomcat中有配置虚拟目录,均需要仔细检查配置文件。


---END---


玩的愉快~



0 0
原创粉丝点击