quartz2源码分析(1)--学习笔记

之前使用quartz都是简单的执行几个任务,前段时间,公司需要集群支持,所有抽空研究了下quartz源码,现在整理下

因业务需要任务量会大量增加,平常一般使用方式都是单点,任务相关数据采用RAMStore,容易出现单点故障,需要人工介入,因此我们开启了Quartz集群功能,多台机器一起调度执行一波任务,其中一台机器宕机或任务非异常原因都会自动被其他机器接管.

1.配置

Quartz使用特别简单,单机和集群区别在quartz.properties

一般使用都是默认配置

// quartz 服务实例名

org.quartz.scheduler.instanceName:DefaultQuartzScheduler

// rmi远程调用代理默认不用

org.quartz.scheduler.rmi.export: false

org.quartz.scheduler.rmi.proxy: false

// Job事务是否自定义的 spring quartz采用了这个特性

org.quartz.scheduler.wrapJobExecutionInUserTransaction:false

 

// Job执行的线程池

org.quartz.threadPool.class:org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount: 10

// 线程权重

org.quartz.threadPool.threadPriority:5

// 线程类加载器是否继承父类加载器

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread:true

// job阻塞时间操作此时间将跳过此次执行

org.quartz.jobStore.misfireThreshold:60000

// 默认内存存储模式

org.quartz.jobStore.class:org.quartz.simpl.RAMJobStore

 

集群配置模式与单机配置唯一区别

 

// quartz jdbc事务持久化

org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX 

org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate 

org.quartz.jobStore.tablePrefix = QRTZ_ 

// 此值默认是关闭的集群要开启它

org.quartz.jobStore.isClustered = true 

// 同一实例集群检测其他实例是否存活的轮询时间

org.quartz.jobStore.clusterCheckinInterval=20000   

// 指定数据源

org.quartz.jobStore.dataSource = myDS 

 

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver 

// 数据源 内部c3p0池子

org.quartz.dataSource.myDS.URL = ${jdbc.url}

org.quartz.dataSource.myDS.user = ${jdbc.username}

org.quartz.dataSource.myDS.password= ${jdbc.password}

org.quartz.dataSource.myDS.maxConnections = 30

表结构说明

表名前缀qrtz通过配置决定,下面表都是quartz官方提供的建表sql生成,对各表简要说明

 

1. 表:qrtz_blob_triggers

字段

说明

SCHED_NAME

Quartz 实例名

TRIGGER_NAME

密码

TRIGGER_GROUP

应用编码

BLOB_DATA

 

说明:

 

2.表:qrtz_calendars

字段

说明

SCHED_NAME

Quartz 实例名

CALENDAR_NAME

日历名称

CALENDAR

Blob calendar对象序列化后存入此字段

说明:

schedule.addCalendars里创建此表记录, trigger.setCalendarNametrigger应用于calendar方式

 

3.:qrtz_cron_triggers

字段

说明

SCHED_NAME

Quartz 实例名

TRIGGER_NAME

Trigger名称

TRIGGER_GROUP

Trigger组

CRON_EXPRESSION

Cron表达式

TIME_ZONE_ID

时区

说明:创建的cron表达式的trigger记录存放此表

 

4.表: qrtz_fired_triggers

字段

说明

SCHED_NAME

Quartz 实例名

ENTRY_ID

InstanceId+系统当前毫秒

TRIGGER_NAME

Trigger 名称

TRIGGER_GROUP

Trigger 组

INSTANCE_NAME

Quartz InstanceId 实例对象ID

FIRED_TIME

触发时间(系统时间)

SCHED_TIME

下次fire时间

PRIORITY

任务优先级

STATE

状态都是“ACQUIRED”

JOB_NAME

jobdetail名字

JOB_GROUP

Jobdetail 组

IS_NONCONCURRENT

同一任务是否并行执行

REQUESTS_RECOVERY

job是否恢复运行

说明:要被执行的任务将出现在此表,执行完后删除

5.表: QRTZ_JOB_DETAILS

字段

说明

SCHED_NAME`

Quartz 实例名

JOB_NAME

job名称


JOB_GROUP

job组

DESCRIPTION

描述

JOB_CLASS_NAME

执行job class类

IS_DURABLE

持久job

IS_NONCONCURRENT

并发JOB @DisallowConcurrentExecution

IS_UPDATE_DATA

持久jobDataMap

@PersistJobDataAfterExecution

REQUESTS_RECOVERY

job是否恢复运行

JOB_DATA

Job的datamap里的数据

说明:job属性表,维护job的基础信息

 

6.表: QRTZ_LOCKS

字段

说明

SCHED_NAME

Quartz 实例名

LOCK_NAME

锁名称

说明:字典表,初始化两条记录,一个是获取trigger的锁,一个触发trigger的锁

 

7.表: QRTZ_PAUSED_TRIGGER_GRPS

字段

说明

SCHED_NAME

Quartz 实例名

TRIGGER_GROUP

Trigger 组

说明:

 

8.表: QRTZ_SCHEDULER_STATE

字段

说明

SCHED_NAME

Quartz 实例名

INSTANCE_NAME

InstanceId

LAST_CHECKIN_TIME

最后一次检查时间

CHECKIN_INTERVAL

检查周期

说明:quartz服务实例信息此表,后台线程通过LAST_CHECKIN_TIME CHECKIN_INTERVAL 当前时间确定那个实例崩溃

 

9.表: QRTZ_SIMPLE_TRIGGERS

字段

说明

SCHED_NAME

Quartz 实例名

TRIGGER_NAME

Trigger 名称

TRIGGER_GROUP

Trigger 组

REPEAT_COUNT

重复执行次数

REPEAT_INTERVAL

间隔时间

TIMES_TRIGGERED

作业运行的次数

说明:simpleTrigger对象创建记录在此表

 

10.表: QRTZ_SIMPROP_TRIGGERS

字段

说明

SCHED_NAME

Quartz 实例名

TRIGGER_NAME

Trigger 名称

TRIGGER_GROUP

Trigger 组

STR_PROP_1

 

STR_PROP_2

 

STR_PROP_3

 

INT_PROP_1

 

INT_PROP_2

 

LONG_PROP_1

 

LONG_PROP_2

 

DEC_PROP_1

 

DEC_PROP_2

 

BOOL_PROP_1

 

BOOL_PROP_2

 

说明:

 

11.表:QRTZ_TRIGGERS

字段

说明

SCHED_NAME

Quartz 实例名

TRIGGER_NAME

Trigger 名称

TRIGGER_GROUP

Trigger 组

JOB_NAME

Job 名称

JOB_GROUP

Job 组

DESCRIPTION

描述

NEXT_FIRE_TIME

下次触发时间 毫秒

PREV_FIRE_TIME

上次触发时间

PRIORITY

权重

TRIGGER_STATE

状态

TRIGGER_TYPE

触发类型 cron ,simple,calendar

START_TIME

开始运行时间

END_TIME

结束运行时间

CALENDAR_NAME

设置的calendar的名称

MISFIRE_INSTR

-1:错过执行 0:正常

JOB_DATA

JOB的datamap,仓库ID存在此datamap里

 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值