Spring Quartz定时任务设置

  这里主要记录一下定时任务的配置,偏向于记录型的一个教程,这里不阐述Quartz的原理。

  首先,在Spring配置文件里配置一个自己写好的一个包含执行任务方法的一个类。

<bean id="testQuartzClass" class="com.xxx.test.schedule.testTaskClass" />

  然后用Spring自带的任务工厂类org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean新建一个任务,并且将刚才配置任务类配置进去

<bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="testQuartzClass" />
        <property name="targetMethod" value="execute" />
    </bean>

  主要是配置一个目标类和目标类里面的目标方法,然后这个任务开始的时候就会自动去执行targetObject里面的targetMethod方法;

  接下来再配置一个cronTrigger,里面会设置一个时间表达式和一个任务:

<bean id="cronTriggerTest" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="testJob" />
        <property name="cronExpression" value="00 00 15 * * ?" />
    </bean>

  一个JobDetail和一个CronTrigger合在一起才能算是一个定时任务,我这里设置的是每天下午三点触发,CronTrigger时间表达式规则可以参考这篇文章:  http://www.cnblogs.com/xuange306/p/6250740.html

  最后配置一个调度器,配置调度器的时候需要一个线程池,把线程池和刚才配置的cronTrigger配置到调度器里去,就大功搞成了

 

<bean id="quartzTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="10"/>
        <property name="maxPoolSize" value="100"/>
        <property name="queueCapacity" value="500" />
    </bean>

 

<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="autoStartup" value="true"/>
        <property name="triggers">
            <list>
                <ref bean="cronTriggerTest" />
            </list>
        </property>
        <property name="taskExecutor" ref="quartzTaskExecutor" />
    </bean>

  值得一提的是,如果不用Spring配置,直接用Quartz,执行的任务类需要实现org.quartz.Job接口并实现excute方法,然后JobDetail会自动执行excute方法,跟Spring指定目标类的目标方法有些不同。

 

posted @ 2017-07-28 17:21  Eleganty  阅读(221)  评论(0编辑  收藏  举报