zoukankan      html  css  js  c++  java
  • spring timetask 定时任务调度

    定时任务调度即在设置的特定时间执行特定的任务,不需要人工干预。

    spring timertask

    spring 自身所带定时任务类,不需要引入第三方jar包,使用方式如下:
     
    EmailReportTask.java
    package com.zwx.core;  
      
    import java.util.TimerTask;  
      
    public class EmailReportTask extends TimerTask{     
        @Override     
        public void run() {     
            System.out.println(" EmailReportTask Run... ");  
        }       
    }   
    applicationContext-springtask.xml
    <pre name="code" class="java"><!-- Bean -->  
        <bean id="emailReportTask" class="com.zwx.core.EmailReportTask" />  
      
        <!-- ScheduledTimerTask设置定时器属性 : period=定时器周期;delay=延迟多久启动 86400000代表24个小时;timerTask=执行定时任务的类对象 -->  
        <bean id="emailReportScheduleReportTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">  
            <property name="timerTask" ref="emailReportTask" />  
            <property name="period" value="2000" />  
            <property name="delay" value="1000" />  
        </bean>  
    <pre name="code" class="java">  
    <!-- Spring的TimerFactoryBean负责启动定时任务; scheduledTimerTasks = 需要启动的定时器任务的列表 --><bean class="org.springframework.scheduling.timer.TimerFactoryBean"><property name="scheduledTimerTasks"><list><ref bean="emailReportScheduleReportTask" /></list></property></bean>   

    spring quartz

    使用第三方定时器实现定时任务,优点:能够对执行时间点的精确配置
     
    自定义任务类:QuartzJob.java
    package com.writchie.quartz;   
    public class QuartzJob   
    {   
         public void work()   
         {   
                 System.out.println("zwx提示您:Spring Quartz的任务调度1被调用!");   
                 //定时调用的业务逻辑   
         }   
    }   
     
    配置:applicationContext-quartz.xml
    <!-- quartz -->  
         <!-- 要调用的工作类 -->   
             <bean id="quartzJob" class="com.writchie.quartz.QuartzJob"></bean>   
             <!-- 可继续加新的任务   -->   
             <!-- 要调用的工作类结束 -->   
      
             <!-- 定义调用对象和调用对象的方法 -->   
             <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">   
                 <!-- 调用的类 -->   
                 <property name="targetObject">   
                     <ref bean="quartzJob"/>   
                 </property>   
                 <!-- 调用类中的方法 -->   
                 <property name="targetMethod">   
                     <value>work</value>   
                 </property>   
             </bean>   
      
             <!-- 可继续加新的   -->   
           <!-- 定义调用对象和调用对象的方法结束 -->   
      
             <!-- 定义触发时间 -->   
             <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean">   
                 <property name="jobDetail">   
                     <ref bean="jobtask"/>   
                 </property>   
                 <!-- cron表达式 此处定义为一直触发执行任务 -->   
                 <property name="cronExpression">   
                     <value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>   
                 </property>   
             </bean>   
               
             <!-- 可继续加新的   -->   
             <!-- 定义触发时间结束 -->   
      
             <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序   -->   
             <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">   
                 <property name="triggers">   
                     <list>   
                         <ref bean="doTime"/>   
                       <!-- 可继续加新的   -->   
      
                     </list>   
                 </property>   
             </bean>   
           <!-- 总管理类结束   -->   
    </beans>  
    所需第三方jar包:quartz-all-1.8.3.jar

    Spring--quartz中cronExpression配置说明 

    字段      允许值         允许的特殊字符  
    秒       0-59        , - * /  
    分       0-59        , - * /  
    小时      0-23        , - * /  
    日期      1-31        , - * ? / L W C  
    月份      1-12 或者 JAN-DEC         , - * /  
    星期      1-7 或者 SUN-SAT      , - * ? / L C #  
    年(可选)       留空, 1970-2099       , - * /  
       
    字段 允许值 允许的特殊字符  
    秒 0-59 , - * /  
    分 0-59 , - * /  
    小时 0-23 , - * /  
    日期 1-31 , - * ? / L W C  
    月份 1-12 或者 JAN-DEC , - * /  
    星期 1-7 或者 SUN-SAT , - * ? / L C #  
    年(可选) 留空, 1970-2099 , - * /  
    表达式意义  
    "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触发  
    每天早上6点  
    0 6 * * *  
    每两个小时  
    0 */2 * * *  
    晚上11点到早上8点之间每两个小时,早上八点  
    0 23-7/2,8 * * *  
    每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点  
    0 11 4 * 1-3  
    1月1日早上4点  
    0 4 1 1 *  
  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/lxl57610/p/7454249.html
Copyright © 2011-2022 走看看