首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

应用Quartz实现项目中的任务调度

2012-08-27 
使用Quartz实现项目中的任务调度网上搜集加自己总结,闲话少说:使用Quartz实现项目中的任务调度的基本步骤:

使用Quartz实现项目中的任务调度

网上搜集加自己总结,闲话少说:


使用Quartz实现项目中的任务调度的基本步骤:

1、创建jobDetail作业任务

2、创建任务触发器

3、创建任务调度工厂来启动触发器


1、创建JobDetail

?

JobDetailBean:
?????? 用户可以直接使用Quartz的JobDetail在Spring中配置一个JobDetail Bean,但是JobDetail使用带参的构造函数,对于习惯通过属性配制的Spring用户来说存在使用上的不便。为此Spring通过扩展JobDetail提供了一个更具Bean风格的JobDetailBean。

??? JobDetailBean扩展于Quartz的JobDetail。使用该Bean声明JobDetail时,Bean的名字即是任务的名字,如果没有指定所属组,就使用默认组。除了JobDetail中的属性外,还定义了以下属性:

??? JobClass:类型为Class,实现Job接口的任务。

?? BeanName:默认为Bean的ID名,通过该属性显式指定Bean名称,它对应任务的名称。

?? JobDateAsMap:类型为Map,为任务所对应的JobDataMap提供值。之所以需要提供这个属性,是因为用户无法在Spring配置文件为JobDataAsMap类型的属性提供信息,所以Spring通过jobDataAsMap设置JobDataMap的值。

? ApplicationContextJobDataKey:用户可以将Spring ApplicationContext的引用保存到JobDataMap中,以便在Job的代码中访问ApplicationContext。为了达到这个目的,用户需要指定一个键,用以在jobDataAsMap中保存? ApplicationContext,如果不设置此键,JobDetailBean就不将ApplicationContext放入到JobDataMap中。
????????? JobListenerNames;类型为String[],指定注册在Scheduler中的JobListeners名称,以便让这些监听器对本任务的事件进行监听。

    <bean id="autoSendJob"        value="applicationContext"/>        <property name="jobDataAsMap">        <map>                    <entry key="days">                <value>1</value>                </entry>                           <entry key="isAutoSend">                <value>false</value>                </entry>                <entry key="isDebug">                <value>false</value>                </entry>            </map>        </property>    </bean>

?days、isAutoSend、isDebug是类中AutoSendScheduler中自己定义的属性!

public class AutoSendScheduler extends QuartzJobBean {private int days=1;private Boolean isAutoSend;private Boolean isDebug;protected void executeInternal(JobExecutionContext arg0) {Map dataMap = arg0.getJobDetail().getJobDataMap();ApplicationContext appCtx = (ApplicationContext)dataMap.get("applicationContext");。。。}}

?

<bean id="jobDetail_1" ref="myService"> <property name="targetMethod" value="doJob"> <property name="concurrent" value="false"></bean><bean id="myService" />?

public class MyService(){         public void doJob(){                 System.out.println("doJobing.....");         }}

?jobDetail_1将MyService#doJob()封装成一个任务,同时通过concurrent属性指定任务的类型,默认情况下封装为无状态的任务,如果希望目标封装为有状态的任务,仅需要将concurreng设置成false就可以了。
Spring通过名为concurrent的属性指定任务的类型,能够更直接地描述任务执行的方式(有状态的任务不能并发执行,无状态的任务可并发执行)

?

<bean id="simpleTrigger" name="code"><bean id="cronTrigger" src="/img/2012/06/30/2017525581.jpg">

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 一组触发器 --> <property name="triggers"> <list> <ref bean="simpleTrigger"/> </list> </property> </bean>?

。。。

参考:

http://blog.csdn.net/CMTobby/archive/2007/09/21/1795257.aspx

http://www.easyjf.com/blog/html/20071230/1015808.html

http://www.iteye.com/topic/144515

http://www.iteye.com/topic/290532

http://www.ibm.com/developerworks/cn/java/j-quartz/