用spring实现定时调度

spring有两种执行定制调度的机制

一种是使用JDK 的TimerTask,在spring里面配置类似Timer的时间配置,但是这种方法不能准确设置一个起始时间。

另一种是使用spring + quartz实现,,当有任务触发时,spring会去调用quartzJob的execute()方法

这里使用第二种方法做一个实例

 

 

 

定时调度的任务执行类,需要导入一个quartz.jar包,去网上可以下载一个

----------------------------------------------------------------------------------------------------------------------------------

import org.springframework.scheduling.quartz.*;

import com.huatech.statistic.data.StatisticService;

 

public class StatTesk extends QuartzJobBean{
 
    private StatisticService statisticService;
    

    public void setStatisticService(StatisticService statisticService) {
        this.statisticService = statisticService;
    }

    //这个函数是调度任务执行的入口
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws org.quartz.JobExecutionException {

        //在这里面可以写需要定时执行的代码

    }

}

---------------------------------------------------------------------------------------------------------------------------------- 

 

 

spring配置文件里面只需要配置如下几个主要参数就可以了:

----------------------------------------------------------------------------------------------------------------------------------

<beans>

    <bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass">

            <!--下面是你要执行定时执行的类路径-->
            <value>com.huatech.statistic.timer.StatTesk</value>
        </property>
        <property name="jobDataAsMap">
            <map>

                <!--这儿可以把自己写的BEAN注入到执行类,我这里面注入了自己的BEAN statisticService-->
                <entry key="statisticService">
                    <ref bean="statisticService" />
                </entry>
            </map>
       </property>
     </bean>


     <bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
         <property name="jobDetail">
             <ref bean="reportJob" />
         </property>

         <!--这儿配置起始执行需要延迟多长时间-->
         <property name="startDelay">
             <value>1000</value>
         </property>

         <!--这儿配置每次执行的间隔时间-->
         <property name="repeatInterval">
             <value>2000</value>
         </property>
      </bean>

      <!-- 配置一个触发器 -->
      <bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
          <property name="jobDetail">
              <ref bean="reportJob" />
          </property>

          <!--这儿可以准确配置任务执行的时间,如下面为每天的21:01:00执行任务-->
          <property name="cronExpression">
              <value>0 1 21 * * ?</value>
          </property>
      </bean>

      <!-- 添加上面配置好的触发器,可添加多个 -->
      <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
          <property name="triggers">
              <list>
                   <ref bean="cronReportTrigger" />
              </list>
          </property>
      </bean>

</beans>

---------------------------------------------------------------------------------------------------------------------------------

 

 

下面是配置触发器触发时间的一些例子:

"0 0 12 * * ?"       每天中午12点触发
"0 15 10 ? * *"       每天上午10:15触发
"0 15 10 * * ?"       每天上午10:15触发
"0 15 10 * * ? *"       每天上午10:15触发
"0 15 10 * * ? 2005"       2005年的每天上午10:15触发
"0 * 14 * * ?"       在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?"       在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?"       在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?"       在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED"       每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI"       周一至周五的上午10:15触发
"0 15 10 15 * ?"       每月15日上午10:15触发
"0 15 10 L * ?"       每月最后一日的上午10:15触发
"0 15 10 ? * 6L"       每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005"       2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3"       每月的第三个星期五上午10:15触发

你可能感兴趣的:(spring,jdk,bean,quartz)