Spring Quartz定时器

45 篇文章 0 订阅
[size=medium]
Spring Quartz可以通过两种方式来调度程序:一是使用Spring提供的 MethodInvokingJobDetailFactoryBean 代理类,Quartz通过该代理类直接调度任务类的某个函数;二是任务类继承并实现Quartz接口,Quartz通过该接口进行调度。

先说说这个MethodInvokingJobDetailFactoryBean 代理类吧。由Quartz直接调度任务类的某个接口,那么,业务类是不必进行任何修改的。我们的业务类大概如下:[/size]



public class LoopVZZJZ {

@SuppressWarnings( { "unchecked", "finally" })
public void loopServiceExpired() {

//业务逻辑代码
}

}


[size=medium]

配置如下:

第一步,在Spring配置文件中增加本业务类
[/size]­
<bean name="loopVZZJZManage" autowire="byName" class="com.sitechasia.xinnet.agent.serv.service.impl.LoopVZZJZ"></bean>­

[size=medium]
第二步,定义任务。在Spring配置文件中配置代理类MethodInvokingJobDetailFactoryBean,定义任务的详细信息。
[/size]
­
<!-- 服务到期轮询 -->
<!--定义定时执行testQuarz 这个bean中的sayHello()方法-->
<bean id="loopServiceExpired_methodVH" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="loopVZZJZManage" />
</property>
<property name="targetMethod">
<value>loopServiceExpired</value>
</property>
</bean>­

[size=medium]
这个配置告诉Spring,我们的任务是执行id为loopVZZJZManage的bean中的loopServiceExpired方法。其中参数concurrent告诉Spring,不要并发运行这个任务。
­
第三步,配置一个触发器。在Spring配置文件中配置触发器类CronTriggerBean 。
[/size]
­
 <!--触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是helloworldTask,即触发器去触发哪个bean..并且我们还定义了触发的时间:每天5:17pm-->
<bean id="loopServiceExpiredTimeVH"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="loopServiceExpired_methodVH" />
</property>
<property name="cronExpression">
<!-- 关键在配置此表达式 -->
<value>0 0 1 1 * ? </value><!-- 从左到右分别是:秒(0-59) 分(0-59) 时(0-23) 日期(1-31) 月份(1-12) 星期(1-7) -->
</property>
</bean>


[size=medium]
触发器将告诉Quartz两件事:在何时触发任务、触发哪个任务。其中属性参数cronExpression为 调度时间,格式和unix上的crontab类似,具体见下表1。“0 0 1 1 * ?”表示每月1日凌晨1点运行。其中问号表示忽略该位置(星期)上的值。属性参数jobDetail指向具体的任务bean:loopServiceExpired_methodVH。如果你有多个任务,每个任务的触发时间都不一样,则你可以在此配置多个不同的触发器。


再说说第二种方式吧:
第一步,LoopVZZJZ是要进行小小的修改[/size]



public class LoopVZZJZ implements org.quartz.Job { //继承quartz 的job接口
{


//实现job接口的execute函数,在其中简单调用perform()函数就可以了。
public void execute(org.quartz.JobExecutionContext context){ //执行报表统计入口函数
loopServiceExpired()
}
//其它的保持不变。


@SuppressWarnings( { "unchecked", "finally" })
public void loopServiceExpired() {

//业务逻辑代码
}

}




[size=medium]
第二步,定义任务。在Spring配置文件中配置如下任务的详细信息。[/size]

­
<bean name=" loopServiceExpired" class= "org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.sitechasia.xinnet.agent.serv.service.impl.LoopVZZJZ" />
</bean>
­
[size=medium]此配置告诉Quartz,我们的任务类的名字为LoopVZZJZ。在定时触发时,Quartz会利用该类名来创建任务的实例,并执行该实例的execute方法。
­
第三、第四步与第一种的调度方式相应的步骤一样。
­
spring的配置文件如下:[/size]

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
­
<!-- 我们的任务 -->
<bean name="loopServiceExpired" class= "org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.sitechasia.xinnet.agent.serv.service.impl.LoopVZZJZ" />
</bean>
­
<!-- 触发器 -->
<bean id="cronTrigger" class= "org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 指向我们的任务 -->
<property name="jobDetail" ref="loopServiceExpired" />
<!-- 每月1日凌晨1点运行 -->
<property name="cronExpression" value="0 0 1 1 * ?" />
</bean>
­
<!-- 调度器 -->
<bean class= "org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list><!-- 触发器列表-->
<ref bean="cronTrigger" />
</list>
</property>
</bean>
</beans>




[size=medium]参考文章:http://yangxianjiangg.iteye.com/blog/876111[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值