zoukankan      html  css  js  c++  java
  • 【Spring系列】spring mvc整合任务调度

    一、在dispatcher-servlet.xml中增加定时任务扫描路径和其余配置信息

    xmlns:task="http://www.springframework.org/schema/task"
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
     <!--集成注解schedule-->
        <context:component-scan base-package="com.slp.task"/>
        <task:executor id="executor" pool-size="5"/>
        <!--配置线程池-->
        <task:scheduler id="scheduler" pool-size="10"/>
        <!--开启task注解-->
        <task:annotation-driven scheduler="scheduler" executor="executor"/>
        <!--集成注解schedule-->
    

      

    二、使用示例

    package com.slp.task;
    
    import org.apache.log4j.Logger;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    /**
     * @author sanglp
     * @create 2018-02-02 11:23
     * @desc 设置多个定时任务示例
     **/
    
    @Component
    public class DemoTask2 {
        private Logger log = Logger.getLogger(DemoTask2.class);
    
            int i=0 ;
            int j=0;
            int k=0;
    
    
        /**
         * @Scheduled可以作为一个触发源添加到一个方法中,以一个固定的时间延迟调用一次执行,这个周期是以上一个调度任务的完成时间为基准,在上一个任务完成之后5s后再次执行
         */
        @Scheduled(fixedDelay = 5000)//@Scheduled可以作为一个触发源添加到一个方法中,以一个固定的时间延迟调用一次执行,这个周期是以上一个调度任务的完成时间为基准,在上一个任务完成之后5s后再次执行
        public void demo1(){
            log.info("定时任务1开始执行啦!!!");
            long begin = System.currentTimeMillis();
            i=i+1;
            System.out.println("我是小i我要长大了"+i);
    
            long end = System.currentTimeMillis();
    
            log.info("定时任务1执行结束,花费时间为"+(end-begin)+"毫秒");
        }
    
        /**
         * 以一个固定延迟时间5秒中调用一次执行,这个周期是以上一个任务开始时间为基准,从上一个任务开始执行后5s再次调用
         */
        @Scheduled(fixedRate  = 5000)
        public void demo2(){
            log.info("定时任务2开始执行啦!!!");
            long begin = System.currentTimeMillis();
            j=j+1;
            System.out.println("我是小j我要长大了"+j);
    
            long end = System.currentTimeMillis();
    
            log.info("定时任务2执行结束,花费时间为"+(end-begin)+"毫秒");
        }
    
        /**
         * 在特定的时间执行,使用cron表达式
         */
        @Scheduled(cron = "0 34 11 * * ?")
        public void demok(){
            log.info("定时任务3开始执行啦!!!");
            long begin = System.currentTimeMillis();
            k=k+1;
            System.out.println("我是小k我要长大了"+k);
    
            long end = System.currentTimeMillis();
    
            log.info("定时任务3执行结束,花费时间为"+(end-begin)+"毫秒");
        }
    }
    

      日志信息:

    定时任务1开始执行啦!!!
    我是小i我要长大了7
    [INFO ] 2018-02-02 13:09:08,378 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:34)
    定时任务1执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:13,273 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:42)
    定时任务2开始执行啦!!!
    我是小j我要长大了1
    [INFO ] 2018-02-02 13:09:13,273 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:50)
    定时任务2执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:13,389 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:27)
    定时任务1开始执行啦!!!
    我是小i我要长大了8
    [INFO ] 2018-02-02 13:09:13,401 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:34)
    定时任务1执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:18,249 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:42)
    定时任务2开始执行啦!!!
    我是小j我要长大了1
    [INFO ] 2018-02-02 13:09:18,249 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:50)
    定时任务2执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:18,402 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:27)
    定时任务1开始执行啦!!!
    我是小i我要长大了9
    [INFO ] 2018-02-02 13:09:18,402 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:34)
    定时任务1执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:23,248 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:42)
    定时任务2开始执行啦!!!
    我是小j我要长大了1
    [INFO ] 2018-02-02 13:09:23,248 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:50)
    定时任务2执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:23,403 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:27)
    定时任务1开始执行啦!!!
    我是小i我要长大了10
    [INFO ] 2018-02-02 13:09:23,403 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:34)
    定时任务1执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:28,271 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:42)
    定时任务2开始执行啦!!!
    我是小j我要长大了1
    [INFO ] 2018-02-02 13:09:28,271 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:50)
    定时任务2执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:28,427 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:27)
    定时任务1开始执行啦!!!
    我是小i我要长大了11
    [INFO ] 2018-02-02 13:09:28,428 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:34)
    定时任务1执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:33,250 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:42)
    定时任务2开始执行啦!!!
    我是小j我要长大了1
    [INFO ] 2018-02-02 13:09:33,250 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:50)
    定时任务2执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:33,428 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:27)
    定时任务1开始执行啦!!!
    我是小i我要长大了12
    [INFO ] 2018-02-02 13:09:33,428 method:com.slp.task.DemoTask2.demo1(DemoTask2.java:34)
    定时任务1执行结束,花费时间为0毫秒
    [INFO ] 2018-02-02 13:09:38,291 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:42)
    定时任务2开始执行啦!!!
    我是小j我要长大了1
    [INFO ] 2018-02-02 13:09:38,291 method:com.slp.task.DemoTask2.demo2(DemoTask2.java:50)
    定时任务2执行结束,花费时间为0毫秒
    

      

    三、cron表达式

    一个cron表达式有至少6个(也可能是7个)有空格分隔的时间元素

    按顺序依次为:

    1. 秒(0~59)
    2. 分钟(0~59)
    3. 小时(0~23)
    4. 天(0~31)
    5. 月(0~11)
    6. 星期(1~7 SUN MON TUE WED THU FRI SAT)
    7. 年份(1970-2099)
  • 相关阅读:
    Android开源日志框架xlog
    [CrackMe]160个CrackMe之18
    SEH异常
    全局句柄表
    用户层异常的派发与处理
    用户层异常的处理
    内核层异常的收集与处理
    两种异常(CPU异常、用户模拟异常)的收集
    无处不在的页异常
    AppBoxFuture(四). 随需而变-Online Schema Change
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/8404694.html
Copyright © 2011-2022 走看看