没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
分布式调度框架 quartz
官网地址:
https://www.w3cschool.cn/quartz_doc/
1.常见分布式调度框架的对比
框架名称 源码商
推荐
指数
支持
集群
支持分
布式
优点 缺点
quartz
OpenSymph
ony
***** √ √
与
spring
天然集成
没有友好的管理界面,功能单
一,对于管理调用的任务比较
困难
xxl-job
许雪里
****
Saturn
唯品会
****
Elastic-Job
当当网
***
TBSchedul
e
淘宝网
*
代码陈旧,停止维护
lts
cronsun
2.Quartz 简介
是 开源组织在 !" 领域又一个开源项目,它可以与
#$$ 与 #$ 应用程序相结合也可以单独使用。 可以用来创建简单或为运行十个,百
个,甚至是好几万个 ! 这样复杂的程序。 ! 可以做成标准的 % 组件或 $ &。
的最新版本为 ##。
2.1. Quartz 运行环境
可以嵌入到另一个独立的应用程序中;
可以在应用程序服务器内被实例化,并且参与事务;
可以作为一个独立的程序运行'其自己的 ()*,可以通过 +), 使用;
可以被实例化,作为独立的项目集群'负载均衡或故障转移功能*,用于 -! 的执
行;
2.2. Quartz 的设计模式
组件模式
链式编程
. 工厂模式
&" 模式
2.3. Quartz 使用步骤
2.3.1. 任务 Job
! 就是你想实现的任务类'你要做什么?*,每一个 ! 必须实现 ! 接口,且只
需要实现接口自定义的 /'*方法;
package org.quartz;
public interface Job {
void execute(JobExecutionContext context) throws JobExecutionException;
}
!0" 表示一个具体的可执行的调度程序, !是这个可执行程调度程序所要执行的内容,
另外 !0"还包含了这个任务调度的方案和策略。
!&"用于定义构建 !0" 实例,用于定义作业的实例。
!0"-!0"1 !&" !' !*!"'*2
2.3.2. 触发器 Trigger
3" 为你执行任务的触发器'什么时候去做?*。
package org.quartz;
import java.io.Serializable;
import java.util.Comparator;
import java.util.Date;
public interface Trigger extends Serializable, Cloneable,
Comparable<Trigger> {
public static final long serialVersionUID = -3904243490805975570L;
public enum TriggerState { NONE, NORMAL, PAUSED, COMPLETE, ERROR,
BLOCKED }
public enum CompletedExecutionInstruction {
NOOP, RE_EXECUTE_JOB, SET_TRIGGER_COMPLETE, DELETE_TRIGGER,
SET_ALL_JOB_TRIGGERS_COMPLETE, SET_TRIGGER_ERROR,
SET_ALL_JOB_TRIGGERS_ERROR }
public static final int MISFIRE_INSTRUCTION_SMART_POLICY = 0;
public static final int MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY = -1;
public static final int DEFAULT_PRIORITY = 5;
public TriggerKey getKey();
public JobKey getJobKey();
public String getDescription();
public String getCalendarName();
public JobDataMap getJobDataMap();
public int getPriority();
public boolean mayFireAgain();
public Date getStartTime();
public Date getEndTime();
public Date getNextFireTime();
public Date getPreviousFireTime();
public Date getFireTimeAfter(Date afterTime);
public Date getFinalFireTime();
public int getMisfireInstruction();
public TriggerBuilder<? extends Trigger> getTriggerBuilder();
public ScheduleBuilder<? extends Trigger> getScheduleBuilder();
public boolean equals(Object other);
public int compareTo(Trigger other);
class TriggerTimeComparator implements Comparator<Trigger>, Serializable
{
//...
}
public int compare(Trigger t1, Trigger t2) {
return compare(t1.getNextFireTime(), t1.getPriority(), t1.getKey(),
t2.getNextFireTime(), t2.getPriority(), t2.getKey());
}
}
}
3" 接口有以下 4 个子接口:常用的是 "3" 和 3"2
3"&"用于定义构建触发器实例。
3""13"&"3"'*!"'*2
2.3.3. 调度器 Scheduler
为任务的调度器,它会将任务 -! 及触发器 3" 整合起来。基于 3" 设定的
时间来执行 !'什么时候需要做什么事?*2
代表一个调度容器,一个调度容器中可以注册多个 !0" 和 3"。当
3"与 !0"组合,就可以被 容器调度了。
3.Quartz 快速入门指南
3.1. POM.XML 引入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
<!-- 日志组件 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<!-- quartz 持久化默认数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
3.2. 快速入门 demo
public class DemoJob implements Job{
/* 任务被触发时执行的方法 */
@Override
public void execute(JobExecutionContext context) throws
JobExecutionException {
System.out.println("=======任务触发了:" + new Date());
}
}
public class TriggerDemo {
public static void main(String[] args) throws SchedulerException {
job1();
job2();
}
/**
* 使用 quartz 自带的方法来实现简单的重复调用
* @throws SchedulerException
*/
private static void job1() throws SchedulerException {
// 1、创建 job
JobDetail job = JobBuilder.newJob(DemoJob.class).build();
// 2、创建 Schedule,每 5 分钟执行一次
ScheduleBuilder schedBuilder = SimpleScheduleBuilder.repeatMinutelyForever(5);
Trigger trigger = TriggerBuilder.newTrigger().withSchedule(schedBuilder).build();
// 3、创建 Scheduler
Scheduler shcheduler = StdSchedulerFactory.getDefaultScheduler();
shcheduler.scheduleJob(job, trigger);
// 4、启动
shcheduler.start();
}
/**
* 使用 cron 表达式来实现任务调度
* @throws SchedulerException
*/
剩余49页未读,继续阅读
qq_34721505
- 粉丝: 40
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0