2019独角兽企业重金招聘Python工程师标准>>>

Spring Scheduler里有两个概念:

  • 任务(Task)
  • 运行任务的框架(TaskExecutor/TaskScheduler)
  • TaskExecutor:任务的执行器,允许我们异步执行多个任务
  • TaskScheduler:任务调度器,来运行未来的定时任务
  • 触发器(Trigger):决定定时任务是否该运行了,最常用的触发器是CronTrigger

配置(${cron_expression}占位符,配置文件中的值):

<task:scheduler id="myScheduler"/><task:scheduled-tasks scheduler="myScheduler"><task:scheduled ref="doSomethingTask" method="doSomething" cron="${cron_expression}"/><task:scheduled ref="doOtherThingTask" method="doOtherThing" cron="${cron_expression}"/>
</task:scheduled-tasks>

Cron举例:

0 * * * * *:每分钟(当秒为0的时候)
0 0 * * * *:每小时(当秒和分都为0的时候)
*/10 * * * * *:每10秒
0 5/15 * * * *:每小时的5分、20分、35分、50分
0 0 9,13 * * *:每天的9点和13点
0 0 8-10 * * *:每天的8点、9点、10点
0 0/30 8-10 * * *:每天的8点、8点半、9点、9点半、10点
0 0 9-17 * * MON-FRI:每周一到周五的9点、10点…直到17点(含)
0 0 0 25 12 ?:每年12约25日圣诞节的0点0分0秒(午夜)
0 30 10 * * ? 2016:2016年每天的10点半

ref实体类:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class DoSomethingTask {@Scheduled(cron="0 * * * * *")public void doSomething() {System.out.println("do something");}
}

注意:

  • 不同的task也不能同时运行,原因是scheduler的默认线程数为1

解决1、配置pool-size,这样会导致同一个task前一个还没跑完,后面又被触发的问题

<task:scheduler id="scheduler" pool-size="2" />

解决2、让任务运行在不同的scheduler里面

<task:scheduler id="myScheduler1"/>
<task:scheduler id="myScheduler2"/><task:scheduled-tasks scheduler="myScheduler1"><task:scheduled ref="doSomethingTask" method="doSomething" cron="${0 * * * * *}"/>
</task:scheduled-tasks>
<task:scheduled-tasks scheduler="myScheduler2"><task:scheduled ref="doOtherThingTask" method="doOtherThing" cron="${0 * * * * *}"/>
</task:scheduled-tasks>

TaskExecutor

  • 最初创建TaskExecutor,是为了给其他Spring组件提供一个线程池的抽象

转载于:https://my.oschina.net/u/3847203/blog/1816755

Spring 中的Scheduler相关推荐

  1. spring中的quartz调度问题

    参考:http://cuiyingfeng.blog.51cto.com/43841/59734 1.SchedulerFactoryBean会自动启动. 当在spring文件中定义了多个Schedu ...

  2. Quartz在Spring中设置动态定时任务 .

    什么是动态定时任务: 是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定).这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...

  3. Quartz 在 Spring 中如何动态配置时间

    在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间 ...

  4. Quartz 在 Spring 中如何动态配置时间--转

    原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.  有关调度的实现我就第一就想到了Quartz这个开 ...

  5. Quartz在Spring中动态设置cronExpression

    什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...

  6. Spring中@Async用法总结

    转载自 https://blog.csdn.net/blueheart20/article/details/44648667 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的 ...

  7. 在Spring中使用JDBCJobStore配置Quartz

    我将开始一些有关Quartz Scheduler内部,提示和技巧的系列文章,这是第0章-如何配置持久性作业存储. 在Quartz中,您基本上可以在将作业和触发器存储在内存中以及在关系数据库中进行选择( ...

  8. 在Hibernate,EhCache,Quartz,DBCP和Spring中启用JMX

    继续使用JMX的过程(请参阅: 人类JMX ),我们将学习如何在一些流行的框架中启用JMX支持(通常是统计和监视功能). 这些信息大部分都可以在项目的主页上找到,但是我决定在收集这些信息的同时,很少添 ...

  9. Spring中引入其他配置文件

    原文:http://www.cnblogs.com/LiuChunfu/p/5605473.html ------------------------------------------------- ...

最新文章

  1. Kubernetes 必备工具:2021
  2. CAS SSO使用指南
  3. CMakeLists.txt
  4. C语言的逻辑运算符以及优先级及标识符
  5. Python语言学习之文件夹那些事:python和文件夹的使用方法之详细攻略
  6. JAVA基本数据类型、数据类型转换
  7. Redis实战(三):Redis的List、Set、Hash、sorted_set、skip list
  8. cannot find Toolkit in /usr/local/cuda-8.0
  9. “约见”面试官系列之常见面试题第六篇说说弹性布局(建议收藏)
  10. android rxjava2 简书,RXJava2学习
  11. TensorFlow2.0(十二)--实现简单RNN与LSTM网络
  12. asp.net 通过IHttpModule开发接口
  13. Java对象的两大特征_科学网—Java 面向对象的四个特征 - 李玖栋的博文
  14. 中缀表达式转化成后缀表达式
  15. 关于赚钱的 6 个重要认知,多数人都不知道
  16. 高光谱图像分析:分类 I
  17. 慕课网C#开发轻松入门 6-1练习题目
  18. 《普罗米修斯/异形前传》[BD-RMVB.720p.中英双字][2012年科幻]
  19. 转叶寒栋分享:方舟支持C语言编译新功能开源啦!
  20. 30 个 Python 的最佳实践、小贴士和技巧

热门文章

  1. PHP5 mysqli 教程
  2. 团购市场分析:赶集网 团购数据处理过程【笔记】
  3. Ghost后不能启动解决小工具
  4. 【超级大转载】常用的D3D变换相关函数
  5. 开源Android或将收费
  6. js 页面跳转保存状态
  7. 使用python爬虫抓站的一些技巧总结:进阶篇
  8. 理解Android系统的进程间通信原理(二)----RPC机制
  9. stopping NetworkManager daemon failed
  10. Apache Tomcat7+MySQL5.6配置