【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个)有空格分隔的时间元素
按顺序依次为:
- 秒(0~59)
- 分钟(0~59)
- 小时(0~23)
- 天(0~31)
- 月(0~11)
- 星期(1~7 SUN MON TUE WED THU FRI SAT)
- 年份(1970-2099)