文章转自 http://blog.csdn.net/l454822901/article/details/51829307

最近发现真的凹凸了,spring升级到3后原来已经自带任务调度器了,之前还一直使用着Quartz。其实也不是Quartz不好,只是相比之下,使用Spring task真的简单很多,无论是理解还是使用。

Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了。但其实这里我觉得比较尴尬,因为任务调度这样的需求,通常改动都是比较多的,如果用annotation的方式的话,改动就变得麻烦了,必须去重新编译。所以,我只是选择用XML配置的方式,不过我还是习惯性地启用着标注方式,就如AOP配置那样。annotation方式请自行查找@Scheduled

具体配置参考如下即可

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
  7. <bean id="reminderProcessor" class="com.foo.task.ReminderProcessor">
  8. <property name="workers">
  9. <array value-type="com.foo.task.Worker">
  10. <ref bean="projectScheduleRemindWorker" />
  11. </array>
  12. </property>
  13. </bean>
  14. <!-- 配置任务线性池 -->
  15. <task:executor id="executor" pool-size="3" />
  16. <task:scheduler id="scheduler" pool-size="3" />
  17. <!-- 启用annotation方式 -->
  18. <task:annotation-driven scheduler="scheduler"
  19. executor="executor" proxy-target-class="true" />
  20. <task:scheduled-tasks scheduler="scheduler">
  21. <task:scheduled ref="reminderProcessor" method="process"
  22. cron="0 0 12 * * ?" />
  23. </task:scheduled-tasks>
  24. </beans>

核心部分见

  1. <task:scheduled-tasks scheduler="scheduler">
  2. <task:scheduled ref="reminderProcessor" method="process"
  3. cron="0 0 12 * * ?" />
  4. </task:scheduled-tasks>

意思就是每天的12点执行reminderProcessor这个Bean中的process方法。cron的配置表达式跟Quartz基本一致,但实测不支持一些特殊字符,如配置天的时候的L,W和Z,因为遇到要每个月倒数第三天执行任务调度的需求,但我一配置SpringTask报非法字符。

所以,Quartz和SpringTask间的差距也显而易见的。SpringTask用起来十分简单,毕竟是Spring自家的,虽然跟Quartz也可以实现结合,但没那么简单。而SpringTask功能也没Quartz强大,Quartz的集群和高级特性多的去了。所以大家可以自行选择了。不过一般情况下,觉得SpringTask足够了。

附上我这个例子的详细UML说明

Spring任务调度器之Task的使用(转)的更多相关文章

  1. Spring任务调度器之Task的使用

    Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了.但其实这里我觉得比较尴尬,因为任务调度这样的需求,通常改动都是比较多的, ...

  2. Spring的定时任务(任务调度)<task:scheduled-tasks>

    Spring内部有一个task是Spring自带的一个设定时间自动任务调度,提供了两种方式进行配置,一种是注解的方式,而另外一种就是XML配置方式了.注解方式比较简洁,XML配置方式相对而言有些繁琐, ...

  3. Spring 4.x Task 和 Schedule 概述(代java配置)

    转载请注明https://zhangzhaoyu.github.io/2016/09/30/spring-task-and-schedule-deep-research/ 摘要 在很多业务场景中,系统 ...

  4. spring 任务调度quartz

    简单记录一下spring任务调度quartz的例子 首先添加包 quartz-2.2.3.jar 然后写个简单的TestJob类 package com.job; import java.util.D ...

  5. Spring任务调度<task:scheduled-tasks>【含cron参数详解】 (转载)

    Spring内部有一个task是Spring自带的一个设定时间自动任务调度 task使用的时候很方便,但是他能做的东西不如quartz那么的多! 可以使用注解和配置两种方式,配置的方式如下 引入Spr ...

  6. Spring任务调度之Quartz

    一.Quartz作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.Quart ...

  7. Spring任务调度之Timer

    一.分类 由于现在大部分的系统都是采用了spring,所以所有的例子都结合spring来构建,目前主要的任务调度分为三种: Java自带的java.util.Timer类,这个类允许你调度一个java ...

  8. Spring(十)Spring任务调度

    一.计划任务 需要定时执行一些计划(定时更新等),这样的计划称之为计划任务 Spring抽象封装了Java提供的Timer与TimerTask类 也可以使用拥有更多任务计划功能的Quartz 二.Ti ...

  9. Spring任务调度

    任务调度是大多数应用系统的常见需求之一,拿论坛来说:每个半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行对锁定过期的用户进行解锁.以上都是以时间为关注点的调度,事实上 ...

随机推荐

  1. CMD下进入MYSQL的命令

    CMD下进入MYSQL的命令 mysql -h localhost -u root -p 切到MYSQL的bin目录下,输入上面命令,回车 然后输入密码 回车

  2. Nullable<System.DateTime>日期格式转换 (转载)

    一.问题 1.html页面中时间显示出错,数据库中时间是正确的. 原因:没有把DateTime转成String类型. 2.  在C#中,发现不能直接使用ToString("yyyy-MM-d ...

  3. CSS学习笔记11 CSS背景

    background-color:背景色 前面我们经常用background-color这个属性来设置元素的背景色,例如下面这条css可将段落的背景色设置为灰色 p {background-color ...

  4. 【Java POI】1、Java POI的使用

    很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告.有时,一个应用程序甚至希望将Excel文件作为输入数据.例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Ex ...

  5. GCC链接的几个注意点

    库文件依赖顺序 GCC在链接时对依赖库的顺序是敏感的,被依赖的库必须放在后面,比如liba.a依赖libb.a,必须写成liba.a libb.a,否则链接将出错.在库比较多依赖关系比较复杂或者相互依 ...

  6. Matlab Euler's method

    % matlab script to test efficiency of % Euler's method, classical Runge-Kutta, and ode45 % on Arenst ...

  7. c++ cmath头文件

    一.前言 c++的一个头文件. 二.常用方法 1. ceil() 定义: c++11 double ceil (double x); float ceil (float x); long double ...

  8. 洛谷P3721 [AH2017/HNOI2017]单旋(线段树 set spaly)

    题意 题目链接 Sol 这题好毒瘤啊.. 首先要观察到几个性质: 将最小值旋转到根相当于把右子树变为祖先的左子树,然后将原来的根变为当前最小值 上述操作对深度的影响相当于右子树不变,其他的位置-1 然 ...

  9. BZOJ4756: [Usaco2017 Jan]Promotion Counting(线段树合并)

    题意 题目链接 Sol 线段树合并板子题 #include<bits/stdc++.h> using namespace std; const int MAXN = 400000, SS ...

  10. node.js入门学习笔记整理

    (1)node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node与javaScript的区别在于,javaScript的顶层对象是window,而no ...