前言:
  最近要写一个定时任务, 用于同步数据. 以往这种涉及数据库操作的定时脚本, 都会采用python+crontab的方式来实现. 这次画风大转, 决定试试用spring+quartz来实现一下.

  

集成:
  由于Annotation(注解)的发展, quartz和spring的集成愈发的简洁和快速.
  maven的依赖配置:

<!-- quartz support -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.2</version>
</dependency>

  spring的applicationContext.xml中, 添加task自动注入驱动

<task:annotation-driven />

  同时在xmlns 中, 添加如下选项:

xmlns:task="http://www.springframework.org/schema/task"

  然后在xsi:schemaLocation中追加如下项即可:

http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd

  使用idea进行编辑时, 能够自动帮你导入命令空间和schema, 非常方便.

定时任务编写:
  对于定时任务, 只要在类的方法上, 配置@Scheduled注解即可.

@Controller
public class TaskManager {   private static final Logger logger = LoggerFactory.getLogger("task");   // *)
  @Scheduled(cron = "0 0/10 * * * *")
  public void syncTask() {
    logger.info(“task start”);
    // TODO
    // a timed task to execute…
    logger.info(“task stop”);
  } }

  注: 该任务, 每隔10分钟执行一次.
  其cron属性值和crontab的规则很像, 不过quartz的精度精确到秒级:

  1. Seconds
  2. Minutes
  3. Hours
  4. Day-of-Month
  5. Month
  6. Day-of-Week
  7. Year (可选字段)

  具体的crontab规则, 可查阅如下链接: cron表达式详解

测试和特性:
  简单设计了几个case, 测试了下, 发现有些需要注意的地方.
  case 1:
  任务其设定的定时执行时间间隔为1分钟, 但是其执行需要消耗1.5分钟. 这种情况, 会演变成什么呢?
  1) 时刻1:00执行的任务, 和时刻1:01执行的任务, 同时存在并执行.
  2) 时刻1:00执行的任务继续执行, 时刻1:01触发的任务, 等待之前的任务完成, 然后执行.
  3) 时刻1:00执行的任务继续执行, 时刻1:01触发的任务被取消.
  经测试, 事实证明这种情况, 最终演变为3)这种预定, 既触发的任务会因为前一个任务超时, 而取消.
  case 2:
  如果设定, A类型任务因时间点触发, 但此时仍旧有B类型任务在执行. 这种情况下, 会发生什么?
  1). A类型和B类型的任务同时执行
  2). A类型等待B类型任务执行完, 然后调度并执行
  3). A类型任务会取消这次运行.
  经测试, 事实证明还是3)这种预定, 既触发的任务会因有其他任务占据, 而取消.
  这个确实是需要注意一下的, 特此记录一下. 感觉quartz默认的机制是单线程模型, 而且其冲突解决方案采用取消策略, 估计也是为了防止任务堆积. 这和crontab并发执行的思路有差异. 一个向东, 一个向西, 都有其合理的一面.

后记:
  总的来说, 使用spring+quartz是非常的灵活和方便的, 门槛非常的低. quartz定时进程本身就是一个后台服务, 而crontab则是借助crond这个公共的后台服务来实现定时执行任务.
  对于quartz而言, 感觉并没有深入去研究. 比如其内部定时触发的机制, 还有冲突解决方案, 以及相关的配置设定. 后续有机会再去好好地深入研究一番.

公众号&游戏站点:
  个人微信公众号: 木目的H5游戏世界
  
  个人游戏作品集站点(尚在建设中...): www.mmxfgame.com(域名尚未备案),  请点击访问http://120.26.221.54/.

spring学习笔记--quartz和定时任务执行的更多相关文章

  1. Spring学习笔记(一)

    Spring学习笔记(一) 这是一个沉淀的过程,大概第一次接触Spring是在去年的这个时候,当初在实训,初次接触Java web,直接学习SSM框架(当是Servlet都没有学),于是,养成了一个很 ...

  2. 不错的Spring学习笔记(转)

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  3. 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  4. 2.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:

    转自:https://www.cnblogs.com/ssslinppp/p/4528892.html 个人认为,使用@ResponseBody方式来实现json数据的返回比较方便,推荐使用. 摘要 ...

  5. Spring学习笔记之aop动态代理(3)

    Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...

  6. JVM学习笔记:字节码执行引擎

    JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667  

  7. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  8. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  9. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

随机推荐

  1. (DFS)zoj1008-Gnome Tetravex

    现在zoj暂时关了,实际上是在scuoj上做的. 题目地址 看起来题目比较复杂,实际上主要需要思维的是如何恰当的剪枝及合适的DFS角度. 问题等价于将n*n个可能相同的方块放到一个n*n的表中,使满足 ...

  2. MonoRail MVC应用(2)-构建多层结构的应用程序

    习惯了分层结构的.NET开发了,当然也是分层有优势,所以在使用MonoRail进行网站构建时,首先考虑到的问题就是MonoRail如何应对分层的结构.问题1:MonoRail在WEB层没有根目录,必须 ...

  3. CSS-长图水平居中

    场景:客户方给我了一张1920px的长图给我,然后告诉我在屏幕不到1920px时候,屏幕显示图片的中心位置,左右边缘可以不要. 当屏幕小于1000px的时候,图片显示中心部分1000px的图片,且可以 ...

  4. xlistview的XML(头)xlistview_header

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  5. 【kate总结】matlab调用opencv总结

    正常情况下,编写好matlab调用opencv的代码. 1.输入   MEX XX.CPP(所有的mex都要编译) 2.将生成的.mexw64 放到要调用的文件夹下即可 出错总结: 本人写的matla ...

  6. Properties类与读取properties文件

    Properties类 在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释. 这个类的几个常 ...

  7. 【python练习】截取网页里最新的新闻

    需求: 在下面这个网页,抓取最新的新闻,按天划分. http://blog.eastmoney.com/13102551638/bloglist_0_1.html 实现方法1:使用递归 import ...

  8. $.noop()和$.map()函数

    最近在项目中发现$.noop()函数,因以前没使用过故查询下,现整理如下: jQuery.noop()函数是一个空函数,它什么也不做. 当某些时候你需要传入函数参数,而且希望它什么也不做的时候,你可以 ...

  9. postgreSQL初步使用总结

    一.安装 postgreSQL安装完成后会默认生成一个名为postgres的用户和一个名为postgres的数据库.可以使用自带的psql.exe工具来登录.其帮助信息如下 连接到本地的postgre ...

  10. ABBYY

    ABBYY FineReader Engine泰比OCR文字识别控件移动版 产品功能:OMR识别控件 平台: 开发商:ABBYY泰比科技 版本:产品介绍:手机识别的高品质和精度 泰比( ...