[size=medium]
Spring Quartz可以通过两种方式来调度程序:一是使用Spring提供的 MethodInvokingJobDetailFactoryBean 代理类,Quartz通过该代理类直接调度任务类的某个函数;二是任务类继承并实现Quartz接口,Quartz通过该接口进行调度。
先说说这个MethodInvokingJobDetailFactoryBean 代理类吧。由Quartz直接调度任务类的某个接口,那么,业务类是不必进行任何修改的。我们的业务类大概如下:[/size]
[size=medium]
配置如下:
第一步,在Spring配置文件中增加本业务类
[/size]
[size=medium]
第二步,定义任务。在Spring配置文件中配置代理类MethodInvokingJobDetailFactoryBean,定义任务的详细信息。
[/size]
[size=medium]
这个配置告诉Spring,我们的任务是执行id为loopVZZJZManage的bean中的loopServiceExpired方法。其中参数concurrent告诉Spring,不要并发运行这个任务。
第三步,配置一个触发器。在Spring配置文件中配置触发器类CronTriggerBean 。
[/size]
[size=medium]
触发器将告诉Quartz两件事:在何时触发任务、触发哪个任务。其中属性参数cronExpression为 调度时间,格式和unix上的crontab类似,具体见下表1。“0 0 1 1 * ?”表示每月1日凌晨1点运行。其中问号表示忽略该位置(星期)上的值。属性参数jobDetail指向具体的任务bean:loopServiceExpired_methodVH。如果你有多个任务,每个任务的触发时间都不一样,则你可以在此配置多个不同的触发器。
再说说第二种方式吧:
第一步,LoopVZZJZ是要进行小小的修改[/size]
[size=medium]
第二步,定义任务。在Spring配置文件中配置如下任务的详细信息。[/size]
[size=medium]此配置告诉Quartz,我们的任务类的名字为LoopVZZJZ。在定时触发时,Quartz会利用该类名来创建任务的实例,并执行该实例的execute方法。
第三、第四步与第一种的调度方式相应的步骤一样。
spring的配置文件如下:[/size]
[size=medium]参考文章:http://yangxianjiangg.iteye.com/blog/876111[/size]
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]