
quartz
GAMELOFT9
读万卷书,行万里路,知行合一。
展开
-
Quartz Job允许自动注入Spring Bean
在上一篇Spring集成Quartz中,我们介绍了如何将Quartz框架集成到spring环境中来,在PrintJob示例中,我们仅仅是简单的做了Sleep操作。实际上,我们经常需要在具体的job中调用我们的Service服务,而服务通常是作为SpringBean方式托管的。一种方案是通过ContextUtil每次去getBean,例如:EchoService echoService = ...原创 2019-04-11 10:56:01 · 3743 阅读 · 2 评论 -
Quartz Trigger状态转换
在Quartz的框架中,Trigger可能是最重要的一个对象了。定时任务的调度,触发,都是通过对Trigger的操作来实现的。Quartz的所有表里面,光Trigger相关的表就占了一大半,从这一点也可以看出Trigger的重要地位。下面是2.21版本中的数据表:Trigger按其类型不同,分作了SIMPLE、CRON、BLOB等类型,数据库中也有相应的表存储。除此之外,QRTZ_TRIGGE...原创 2019-04-22 16:47:33 · 3918 阅读 · 0 评论 -
用JavaMelody监控Quartz
JavaMelody是一个优秀的监控工具,它可以方便的监控我们的应用,并提供了非常直观的图表展示。下面就用它来监控我的定时任务框架Quartz。1、添加依赖<!--javamelody--> <dependency> <groupId>net.bull.javamelody</groupId> <artifa...原创 2019-04-17 17:23:19 · 957 阅读 · 0 评论 -
Quartz集群原理
传统的Quartz集群是基于数据库实现的,所有的quartz应用节点彼此并没有通信机制。09年terracotta收购Quartz后,才有基于terracotta的分布式的Quartz集群。由于工作中大部分用到的还是基于数据库的集群,这里仅分析基于数据库实现的Quartz集群。配置集群Quartz集群配置很简单,只需要quartz.properties中简单的几行配置即可,如下所示:#开启集...原创 2019-04-22 11:41:23 · 930 阅读 · 0 评论 -
手写一个简单的线程池
多线程的引入,可以大大增强系统的并发能力,但是创建一个线程的开销是很大的,频繁的创建和销毁线程反而使得我们的系统在高并发时性能急剧下降。如果线程用完了,先不着急销毁,有下个任务来了,再重复利用,是不是就好多了。线程池就是这样做的,当一个新任务到来的时候,线程池会找到一个空闲的线程来执行任务。如果线程池里的线程都用完了,那么线程池会根据将任务加入到一个队列中去等待。当队列也满了,线程池会根据要求创建...原创 2019-04-25 19:29:53 · 1486 阅读 · 2 评论 -
Quartz Job是如何执行的
在前一篇Quartz是如何到期触发定时任务的我们通过对源码的分析,了解的Quartz的触发机制。接下来的这一篇,我们分析Job是如何执行的。for (int i = 0; i < bndles.size(); i++) { TriggerFiredResult result = bndles.get(i); TriggerFiredBundle bndle = resu...原创 2019-04-16 15:08:30 · 3994 阅读 · 1 评论 -
spring集成Quartz
本文仅仅记录如何将quartz集成到spring中,不对内容做过多解释,如果有疑问请自行gooogle。一、集成步骤1、引入pom依赖 <!--quartz--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quar...原创 2019-04-09 10:59:00 · 597 阅读 · 0 评论 -
quartz job同表不同环境
我们的开发一般分为开发环境,测试环境和生产环境。由于机器资源限制,开发环境和测试环境虽然部署着不同的应用,但是数据库都是同一个库。一般情况下,是可以这样玩的,也不会有什么问题。但是定时任务经常会出现开发环境的任务跑在了测试环境上,然后日志在开发环境里就查不到了。出现这种情况是因为在quartz.properties文件中,我们开启了集群模式:org.quartz.jobStore.isClust...原创 2019-04-15 18:59:12 · 1420 阅读 · 0 评论 -
Quartz是如何到期触发定时任务的
Quartz中核心的调度类是QuartzScheduler,任务的调度和任务的管理都是QuartzScheduler实现的,然后通过一个静态代理类StdScheduler提供出来。所以要理解定时任务是如何触发的,我们只需要理解透QuartzScheduler即可。public class QuartzScheduler implements RemotableQuartzScheduler {...原创 2019-04-15 17:48:19 · 2541 阅读 · 0 评论 -
Quartz定时任务过期处理策略
由于某种原因,例如应用停掉,导致定时任务错过了本该执行的时间点,这就是定时任务过期。对于过期的定时任务,我们需要基于某种策略对其进行处理。过期策略在Trigger接口中定义了两种过期策略, public static final int MISFIRE_INSTRUCTION_SMART_POLICY = 0; public static final int MISF...原创 2019-04-23 16:46:02 · 5574 阅读 · 0 评论