`
234390216
  • 浏览: 10193855 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460812
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771850
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395469
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393909
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678239
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529311
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178754
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:461973
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150157
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66872
社区版块
存档分类
最新评论

Spring(29)——Spring整合Quartz

阅读更多

假设有一个QuartzTasks类,其有一个print方法,现需要在Spring中使用Quartz对其进行定时调度。我们先配置一个JobDetail,采用Spring提供的MethodInvokingJobDetailFactoryBean,其可以指定需要调度的对象及其方法名称。配置如下:

<bean id="quartzTasks" class="com.elim.learn.spring.task.QuartzTasks"/>

<bean 
    id="quartzTasksJobDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" 
    p:targetObject-ref="quartzTasks"
    p:targetMethod="print"/>

定义JobDetail时如果不希望该Job可以并发调度,即前一次还没有调度完成时不希望下一次调度开始,则可以指定concurrent属性为false。默认是可以并发调度的。

<bean 
    id="quartzTasksJobDetail" 
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" 
    p:targetObject-ref="quartzTasks"
    p:targetMethod="print" 
    P:concurrent="false"/>

然后是定义Trigger,可以选择使用Spring提供的org.springframework.scheduling.quartz.CronTriggerFactoryBeanorg.springframework.scheduling.quartz.SimpleTriggerFactoryBean。CronTriggerFactoryBean用来根据cron表达式定义调度时机。下面的配置就配置了每分钟触发一次quartzTasksJobDetail的调度。

<bean 
    id="cronTrigger" 
    class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" 
    p:jobDetail-ref="quartzTasksJobDetail" 
    p:cronExpression="0 * * * * ?"/>

SimpleTriggerFactoryBean用来定义每隔多长时间调度一次,可以指定初始延迟时间,总的调度次数。下面的配置就定义了每隔3秒调度一次quartzTasksJobDetail,初次调度延迟2秒进行,然后总共重复5次,即一共会进行6次调度。

<bean 
    id="simpleTrigger" 
    class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean" 
    p:jobDetail-ref="quartzTasksJobDetail" 
    p:startDelay="2000" 
    p:repeatInterval="3000" 
    p:repeatCount="5"/>

有了Trigger之后需要通过Scheduler进行注册,下面的代码就定义了一个Scheduler,同时注册了上面定义的两个Trigger。这样当Spring容器启动以后注册的Trigger在达到了调度时机时就会自动进行调度了。

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger" />
            <ref bean="simpleTrigger"/>
        </list>
    </property>
</bean>

通过SchedulerFactoryBean也可以指定一些其它信息,比如下面的代码就指定了Job调度时使用的TaskExecutor。更多信息的指定可以参考对应的API文档。

<bean 
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean" 
    p:taskExecutor-ref="myExecutor">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger" />
            <ref bean="simpleTrigger"/>
        </list>
    </property>
</bean>

(注:本文是基于Spring4.1.0所写)

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics