spring启动quartz定时器

在很多中经常要用到定时任务,quartz是定时器中比较好用的,在Spring中使用quartz是很容易的事情,首先在spring的applicationContext.xml文件中增加如下配置:

<!-- quartz定时器定义 -->

<!-- 要调用的工作类,即任务处理类 -->

<bean id="quartzJob" class="com.mdnet.travel.core.model.QuartzJob"></bean>

<!-- 定义调用对象和调用对象的方法 -->

<bean id="jobtask"

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<!-- 调用的类 -->

<property name="targetObject">

<ref bean="quartzJob" />

</property>

<!-- 调用类中的方法 -->

<property name="targetMethod">

<value>work</value>

</property>

</bean>

<!-- 定义触发时间 和下面的CronTrigger类型选其一   -->

<bean id="doTime" class="org.springframework.scheduling.quartz.SimpleTriggerBean">

<property name="startDelay">

<value>1000</value>

</property>

<property name="repeatInterval">

<value>3000</value>

</property>

<property name="jobDetail">

<ref local="jobtask" />

</property>

</bean>

<!-- CronTigger类型 -->

<!-- <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean"> 

<property name="jobDetail"> <ref bean="jobtask" /> </property> <property 

name="cronExpression"> <value>2</value> </property> </bean> -->

<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序,随项目一起启动  -->

<bean id="startQuertz" lazy-init="false" autowire="no"

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="doTime" />

</list>

</property>

</bean>

 

其中bean startQuertz是quartz的入口,该bean参考bean doTime, doTime bean中描述定时器参数,像循环周期等,在doTime bean中参考jobtask bean,jobtask bean指定了实际处理定时任务的quartzJob bean,quartzJob中指定了具体定时器处理类和具体的处理方法。

在本例中启动的简单定时器,复杂定时器可以参见配置中CrinTrigger部分。

本类中定时器的具体处理类是com.mdnet.travel.core.model.QuartzJob,在com.mdnet.travel.core.model.QuartzJob中work是定时任务的处理方法,具体任务处理类如下:

public class QuartzJob {
    @Resource(name = ISMSService.SERVICE_NAME)
    protected ISMSService smsService;
    public static int quartzCount;
 
    public boolean isNumeric(String str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str);
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }
 
    public void work() {
        //todo 定时任务处理方法,添加你的任务处理代码
 
    }
}

 

祝顺利,德安工作室 2014年6月26日

posted @ 2014-06-26 10:27  程序员老刘  阅读(792)  评论(0编辑  收藏  举报