spring学习笔记--quartz和定时任务执行
前言:
最近要写一个定时任务, 用于同步数据. 以往这种涉及数据库操作的定时脚本, 都会采用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的精度精确到秒级:
- Seconds
- Minutes
- Hours
- Day-of-Month
- Month
- Day-of-Week
- 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和定时任务执行的更多相关文章
- Spring学习笔记(一)
Spring学习笔记(一) 这是一个沉淀的过程,大概第一次接触Spring是在去年的这个时候,当初在实训,初次接触Java web,直接学习SSM框架(当是Servlet都没有学),于是,养成了一个很 ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- 【Spring学习笔记-MVC-4】SpringMVC返回Json数据-方式2
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- 2.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:
转自:https://www.cnblogs.com/ssslinppp/p/4528892.html 个人认为,使用@ResponseBody方式来实现json数据的返回比较方便,推荐使用. 摘要 ...
- Spring学习笔记之aop动态代理(3)
Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...
- JVM学习笔记:字节码执行引擎
JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
随机推荐
- mouseleave 与 mouseout 的不同
Q:给某div添加mouseout事件后,在空白区域移动到其子元素(如按钮)上(此时并没有离开此div)时,会触发mouseout事件,而mouseleave则不会 A:与 mouseout 事件不同 ...
- 再谈IT行业工程师文化
为什么是再呢?因为“工程师文化”这种说法网上很多,各种理解,各种版 本,我只是简单说说我的认识,说的不对的地方敬请各位大牛,高手,高高手多多指教,我本身也是个技术人员,不过只是技术不怎么样而已.写这个 ...
- 使用Fragment 实现动态UI 和 动态添加Fragment
首先写好每个Fragment: 1.在第一个Fragment写一个按钮,使其加载下一个Fragment 布局: <LinearLayout xmlns:android="http:// ...
- android 禁止viewPager 滑动
public class ContainerViewPager extends MyViewPager { public ContainerViewPager(Context context, Att ...
- java.lang.NoSuchMethodError: org.springframework.web.context.request.ServletRequestAttributes.<init>
今天学习 srping mvc 的配置 在核心版本对的情况下,把项目从Server中移除,然后重新加入即可.来源stack over flow
- Android studio 环境搭建
环境变量: CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar JAVA_HOME:F:\Prog ...
- linux学习笔记2:linux 下java开发的软件安装
一.java ee开发环境的搭建 1.jdk的安装步骤 (1)首先必须要有安装文件,具体的可以去相关网站上下载,并制作iso文件 (2)将制作的iso文件挂载到linux系统上,并在虚拟机上将iso文 ...
- 2013年7月份第3周51Aspx源码发布详情
批量重命名文件工具源码 2013-7-19 [VS2010]功能介绍:这是一个新型的文件重命名,主要用了TreeView(树形视图)来选择文件夹,批量进行文件重命名.其中,有"编号在前,编 ...
- [zz]论程序员
g9老大多年前的趣文: 论程序员 根据钱钟书先生的<论文人>胡改的.聊搏一笑,文责不负.程序员是可嘉奖的,因为他虚心,知道上进,并不拿身分,并不安本分.真的,程序员对于自己,有时比旁人对于 ...
- 关于VS2015找不到WIN32的解决办法
问题: 原配的Visual Studio 2015专业版不像之前的版本,在新建项目里面是找不到Win32模板的,那么怎么才能新建Win32项目和Win32控制台应用程序呢?先看如下图所示: 解决: 1 ...