Quartz理解与实现
记录关于Quartz定时调度任务的知识点,知识点主要分为两个部分,第一个部分介绍Quartz,第二部分使用Quartz+Spring来配置使用Quartz的实际操作。
(一)Quartz知识点
Quartz是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定的时间到达时,负责执行(或者通知)其他组件的系统。 一句话概括:Quartz框架的核心就是调度器;
Quartz 具有以下特点:强大的调度功能,灵活的应用方式,分布式和集群能力。
我认为企业级应用Quartz框架的原因应该主要是它的分布式和集群能力,尤其是配合Zookeeper进行开发。
quartz调度核心元素:
- Scheduler:任务调度器,是实际执行任务调度的控制器。在spring中通过SchedulerFactoryBean封装起来。
- Trigger:触发器,用于定义任务调度的时间规则,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比较多。
- JobDetail:用来描述Job实现类及其它相关的静态信息,如Job名字、关联监听器等信息。在spring中有JobDetailFactoryBean和 MethodInvokingJobDetailFactoryBean两种实现,如果任务调度只需要执行某个类的某个方法,就可以通过MethodInvokingJobDetailFactoryBean来调用。
- Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务。
(二)Quartz在Spring中的实际应用
下面给出我配置的一个定时任务,而该任务的实现可以根据具体的场景进行实现。
首先配置Spring:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--新添加的定时任务QuartzTestJob-->
<bean id="quartzTestJob"
class="cn.mwee.service.shop.quartz.QuartzTestJob" /> <bean id="quartzTestTask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="quartzTestJob"/>
<property name="targetMethod" value="execute"/>
<property name="concurrent" value="false"/>
</bean> <bean id="quartzTestTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="quartzTestTask"/>
<!--cron表达式-->
<property name="cronExpression" value="*/10 * * * * ?"/>
</bean> <!-- 总管理类 -->
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="autoStartup" value="false"/>
<property name="triggers">
<list>
<!--<ref bean="koubeiCueWordTrigger"/>-->
<ref bean="quartzTestTrigger"/>
</list>
</property>
</bean>
</beans>
具体实现的任务类QuartzTestJob:
public class QuartzTestJob extends AbstractBaseJob{
@Override
public void work() {
logger.info("QuartzTestJob START"); logger.info("QuartzTestJob OVER");
}
}
这样就配置好了定时任务,具体的启动代码就不给出来,主要是提供一个设置Quartz调度任务的思想与方向。
记录关于Quartz定时调度任务的知识点,知识点主要分为两个部分,第一个部分介绍Quartz,第二部分使用Quartz+Spring来配置使用Quartz的实际操作。
(一)Quartz知识点
Quartz是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预先确定的时间到达时,负责执行(或者通知)其他组件的系统。
一句话概括:Quartz框架的核心就是调度器;
Quartz 具有以下特点:强大的调度功能,灵活的应用方式,分布式和集群能力。
我认为企业级应用Quartz框架的原因应该主要是它的分布式和集群能力,尤其是配合Zookeeper进行开发。
quartz调度核心元素:
- Scheduler:任务调度器,是实际执行任务调度的控制器。在spring中通过SchedulerFactoryBean封装起来。
- Trigger:触发器,用于定义任务调度的时间规则,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比较多。
- JobDetail:用来描述Job实现类及其它相关的静态信息,如Job名字、关联监听器等信息。在spring中有JobDetailFactoryBean和 MethodInvokingJobDetailFactoryBean两种实现,如果任务调度只需要执行某个类的某个方法,就可以通过MethodInvokingJobDetailFactoryBean来调用。
- Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务。
(二)Quartz在Spring中的实际应用
下面给出我配置的一个定时任务,而该任务的实现可以根据具体的场景进行实现。
首先配置Spring:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd">
- <!--新添加的定时任务QuartzTestJob-->
- <bean id="quartzTestJob"
- class="cn.mwee.service.shop.quartz.QuartzTestJob" />
- <bean id="quartzTestTask"
- class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="quartzTestJob"/>
- <property name="targetMethod" value="execute"/>
- <property name="concurrent" value="false"/>
- </bean>
- <bean id="quartzTestTrigger"
- class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
- <property name="jobDetail" ref="quartzTestTask"/>
- <!--cron表达式-->
- <property name="cronExpression" value="*/10 * * * * ?"/>
- </bean>
- <!-- 总管理类 -->
- <bean id="startQuartz"
- class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="autoStartup" value="false"/>
- <property name="triggers">
- <list>
- <!--<ref bean="koubeiCueWordTrigger"/>-->
- <ref bean="quartzTestTrigger"/>
- </list>
- </property>
- </bean>
- </beans>
具体实现的任务类QuartzTestJob:
- public class QuartzTestJob extends AbstractBaseJob{
- @Override
- public void work() {
- logger.info("QuartzTestJob START");
- logger.info("QuartzTestJob OVER");
- }
- }
这样就配置好了定时任务,具体的启动代码就不给出来,主要是提供一个设置Quartz调度任务的思想与方向。
Quartz理解与实现的更多相关文章
- 关于sping quartz定时执行理解与思考
转载请注明原创出处,谢谢! 一直以为自己理解spring quartz,忽然最近几天发现自己理解的不对,在4月18号的时候,我执行了一个spring quartz的计划如下: 1 0 0 */3 * ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- (转)Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail
http://blog.csdn.net/zixiao217/article/details/53053598 首先给一个简明扼要的理解: Scheduler 调度程序-任务执行计划表,只有安排进执行 ...
- quartz源码分析之深刻理解job,sheduler,calendar,trigger及listener之间的关系
org.quartz包 包org.quartz是Quartz的主包,包含了客户端接口. 其中接口有: Calendar接口: 定义了一个关联Trigger可能(或者不可能)触发的时间空间.它没有定义触 ...
- Quartz的misfire理解
misfire用于Trigger触发时,线程池中没有可用的线程或者调度器关闭了,此时这个Trigger变为misfire.当下次调度器启动或者有可以线程时,会检查处于misfire状态的Trigger ...
- JVM的深入理解:由一次Quartz的定时任务引发的“A cannot cast to A”的问题
由Quartz框架引发的“A cannot cast to A”的问题 起因与问题描述 向新开的项目中添加定时任务,部署集群,添加了热加载(springboot-dev-tools),发现在转型时候出 ...
- Spring+quartz cron表达式(cron手册官方)完美理解
------------------------------------- 15 17/1 14/3 * * ? 从每小时的17分15秒开始 每分钟的15秒执行一次14:17:15 ...14:59: ...
- Quartz.net开源作业调度框架使用详解
前言 quartz.net作业调度框架是伟大组织OpenSymphony开发的quartz scheduler项目的.net延伸移植版本.支持 cron-like表达式,集群,数据库.功能性能强大更不 ...
- quartz.net 时间表达式----- Cron表达式详解
序言 Cron表达式:就是用简单的xxoo符号按照一定的规则,就能把各种时间维度表达的淋漓尽致,无所不在其中,然后在用来做任务调度(定时服务)的quart.net中所认知执行,可想而知这是多么的天衣无 ...
随机推荐
- 【Dalston】【第六章】API服务网关(Zuul) 下
Zuul给我们的第一印象通常是这样:它包含了对请求的路由和过滤两个功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础.过滤器功能则负责对请求的处理过程进行干预,是实 ...
- ZOJ 2112 Dynamic Rankings(树状数组+主席树)
题意 \(n\) 个数,\(m\) 个操作,每次操作修改某个数,或者询问某个区间的第 \(K\) 小值. \(1 \leq n \leq 50000\) \(1 \leq m \leq 10000\) ...
- 【Hadoop 分布式部署 五:分布式部署之分发、基本测试及监控】
1.对 hadoop 进行格式化 到 /opt/app/hadoop-2.5.0 目录下 执行命令: bin/hdfs namenode -format 执行的效果图如下 ( 下图成功 ...
- Derek解读Bytom源码-创世区块
作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...
- 中文目录对 sublime text 有什么影响?
用了这软件好几个月了,一直没出现问题.最近做精简时,发现一个奇怪的问题. 相同的配置,为什么两个程序表现得不一样? 难道是哪里的配置不一样? 难道是插件被我精简得太厉害了? 难道是插件有依赖文件被我删 ...
- 免费api
聚合数据提供30大类,100种以上基础数据API服务,国内最大的基础数据API服务,下面就罗列一些免费的各类API接口. 聚合的免费API接口数据: 手机号码归属地API接口:https://www. ...
- Pandas 基础(2) - Dataframe 基础
上一节我们已经对 Dataframe 的概念做了一个简单的介绍, 这一节将具体看下它的一些基本用法: 首先, 准备一个 excel 文件, 大致内容如下, 并保存成 .csv 格式. 然后, 在 ju ...
- P2002 消息扩散
其实这道题蛮水的 思路: 根据题意,他说有环,自然想到要用tarjan,后面就很简单了: 缩完点之后重新建图,开一个inin数组表示该点的入度是多少(psps:该点表示缩完点之后的大点): 最后统计一 ...
- python的json模块的dumps,loads,dump,load方法介绍
dumps和loads方法都在内存中转换, dump和load的方法会多一个步骤,dump是把序列化后的字符串写到一个文件中,而load是从一个文件中读取字符串 将列表转为字符串 >>&g ...
- Ubuntu18.04的网络配置
网卡与DNS配置 1)打开命令窗口(右键单机桌面选择Open Terminal或者用快捷键Ctrl+Alt+T打开终端),输入ip a查看自己的网卡编号 2)输入命令sudo vim /etc/net ...