spring+quartz 实现定时任务一

一般情况下,在web工程里面实现一个随着工程启动而自动启动的,并且定时完成某些操作的功能是很简单的.

比如在web.xml里面定义一个servlet,然后把load-on-startup定义为1即可.

具体的定时逻辑就在这个servlet里面实现的.

但是随着web开发的逐渐发展,大量比较好的框架得到了运用.如spring,springmvc等,这样的话,再直接修改web.xml就有点简单粗暴了.

所以就才用了spring+quartz来优雅的实现启动自动运行的定时任务.

本项目基于spring+springmvc实现,基本配置略去,仅仅提到了最主要的配置文件.

1. 定义一个bean文件作为要执行的task

<bean name="reportTask" class="com.aw.task.ReportTask" />

2. 定义一个bean,使用reportTask作为参数

1 <bean id="generateReport" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
2   <property name="targetObject">
3     <ref bean="reportTask"/><!-- 指定具体拦截哪个定时任务 -->
4   </property>
5   <property name="targetMethod">
6     <value>generate</value>
7   </property>  
8 </bean>

3. 定义一个bean,使用generateReport作为参数

<!-- 用cron表达式定义定时任务执行时间 -->  
    <bean id="gr" class="org.springframework.scheduling.quartz.CronTriggerBean">  
      <property name="jobDetail">  
         <ref bean="generateReport"/><!-- 指明要调用哪个任务 -->  
      </property>  
      <!-- cron表达式 -->  
      <property name="cronExpression">            
          <value>0 0/5 * * * ?</value>  
      </property>  
    </bean>

其中cronExpression作为控制任务启动定时配置,我这个配置是每5分钟执行一次.

其他的配置请百度,有详细的解释

4. 定义入口bean

<bean id="startReport" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        <property name="triggers">  
            <list>  
                <ref bean="gr"/>                      
            </list>  
        </property>  
    </bean>  

完成了上面四步配置以后,就可以在web工程启动的时候,优雅的启动一个定时器任务了

原文地址:https://www.cnblogs.com/raspberry/p/5534607.html