前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot使用quartz的配置

springboot使用quartz的配置

作者头像
山行AI
发布2019-08-30 22:22:39
8.3K0
发布2019-08-30 22:22:39
举报
文章被收录于专栏:山行AI山行AI

表信息、类信息、配置信息

表信息

表名称

说明

qrtzblobtriggers

Trigger作为Blob类型存储(用于Quartz用户用JDBC创建他们自己定制的Trigger类型,JobStore 并不知道如何存储实例的时候)

qrtz_calendars

以Blob类型存储Quartz的Calendar日历信息, quartz可配置一个日历来指定一个时间范围

qrtzcrontriggers

存储Cron Trigger,包括Cron表达式和时区信息。

qrtzfiredtriggers

存储与已触发的Trigger相关的状态信息,以及相联Job的执行信息

qrtzjobdetails

存储每一个已配置的Job的详细信息

qrtz_locks

存储程序的非观锁的信息(假如使用了悲观锁)

qrtzpausedtrigger_graps

存储已暂停的Trigger组的信息

qrtzschedulerstate

存储少量的有关 Scheduler的状态信息,和别的 Scheduler 实例(假如是用于一个集群中)

qrtzsimpletriggers

存储简单的 Trigger,包括重复次数,间隔,以及已触的次数

qrtz_triggers

存储已配置的 Trigger的信息

qrztsimproptriggers

--

核心类信息

  • QuartzSchedulerThread:负责执行向QuartzScheduler注册的触发Trigger的工作的线程。
  • ThreadPool:Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提供运行效率。
  • QuartzSchedulerResources:包含创建QuartzScheduler实例所需的所有资源(JobStore,ThreadPool等)。
  • SchedulerFactory :提供用于获取调度程序实例的客户端可用句柄的机制。
  • JobStore:通过类实现的接口,这些类要为org.quartz.core.QuartzScheduler的使用提供一个org.quartz.Job和org.quartz.Trigger存储机制。作业和触发器的存储应该以其名称和组的组合为唯一性。
  • QuartzScheduler :这是Quartz的核心,它是org.quartz.Scheduler接口的间接实现,包含调度org.quartz.Jobs,注册org.quartz.JobListener实例等的方法。
  • Scheduler :这是Quartz Scheduler的主要接口,代表一个独立运行容器。调度程序维护JobDetails和触发器的注册表。一旦注册,调度程序负责执行作业,当他们的相关联的触发器触发(当他们的预定时间到达时)。
  • Trigger :具有所有触发器通用属性的基本接口,描述了job执行的时间出发规则。- 使用TriggerBuilder实例化实际触发器。
  • JobDetail :传递给定作业实例的详细信息属性。JobDetails将使用JobBuilder创建/定义。
  • Job:要由表示要执行的“作业”的类实现的接口。只有一个方法 void execute(jobExecutionContext context)(jobExecutionContext 提供调度上下文各种信息,运行时数据保存在jobDataMap中)
  • Job有个子接口StatefulJob ,代表有状态任务。有状态任务不可并发,前次任务没有执行完,后面任务处于阻塞等到。

quartz配置

主要配置

属性名称

是否必选

类型

默认值

说明

org.quartz.scheduler.instanceName

String

QuartzScheduler

Schedule调度器的实体名字

org.quartz.scheduler.instanceId

String

NON_CLUSTERED

Schedule调度器的实体的Id,必须唯一。你想生成intanceId的时候可以设置为AUTO;想从系统属性org.quartz.scheduler.instanceId取值时可以设置为SYS_PROP

org.quartz.scheduler.instanceIdGenerator.class

String(类名)

org.quartz.simpl.SimpleInstanceIdGenerator 生成Schudule实体Id的类,只有在属性org.quartz.scheduler.instanceId设置为AUTO时使用,默认的实现org.quartz.scheduler.SimpleInstanceGenerator是基于主机名称和时间戳生成。其他的实现查看具体的文档

org.quartz.scheduler.threadName

String

instanceName + ‘_QuartzSchedulerThread’

Scheduler线程的名称

org.quartz.scheduler.makeSchedulerThreadDaemon

boolean

false

指定Scheduler是否以守护线程(服务)运行

org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer

boolean

false

目前不太理解

org.quartz.scheduler.idleWaitTime

long

30000

当调度程序空闲时,在重新查询可用触发器之前,调度程序将等待毫秒的时间数。不建议少于5000ms,而少于1000是不合法的参数

org.quartz.scheduler.doFailureRetryInterval

long

15000

使用JobStore(比如连接数据库)时Schueduler检测到失去数据库连接后重新尝试连接的毫秒数

org.quartz.scheduler.classLoadHelper.class

String(类名)

org.quartz.simpl.CascadingClassLoaderHelper

类加载相关

org.quartz.scheduler.jobFactory.class

String(类名)

org.quartz.simpl.PropertySettingJobFctory 给Scheduler Context、Job、Trigger的JobDataMaps设置属性值的方式

org.quartz.contenxt.key.SOME_KEY

String None

键值对,保存在Scheduler Context中,比如有这样的配置org.quartz.shceduler.key.MyKey=MyValue,则在Scheduler Context中赋值方式为scheduler.getContext().put(“MyKey”, “MyValue”)

org.quartz.scheduler.userTransactionURL

String(url) java:comp/UserTransaction

事务管理JNDI URL地址。只有当Quartz使用JobStoreCMT和org.quartz.scheduler.wrapJobExecutionInUserTransaction 设置为true时使用

org.quartz.scheduler.wrapJobExecutionInUserTransaction

boolean

false

只有当你在执行一个Job时想使用UserTransaction时设置为true,参考@ExecuteInJTATransaction 注解

org.quartz.scheduler.skipUpdateCheck

boolean

false

是否跳过版本检测。可以设置系统参数org.terracotta.quartz.skipUpdateCheck=true或者在JAVA命令行使用-D选项。在正式库运行时应设置为true。

org.quartz.scheduler.batchTriggerAcquisitionMaxCount

int

1

在同一时间运行Scheduler获取trigger的数量。如果设置的数量>1,并且使用JDBC JobStore,则属性org.quartz.jobStore.acquireTriggersWithinLock应设置为true,可以避破坏数据。

org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindow

long

0

运行Scheduler在获取和触发tigger的提前的时间。

线程池配置

属性名称

是否必选

类型

默认值

说明

org.quartz.threadPool.class

String(类名)

null

Scheduler使用的线程池名称,实现了ThreadPool接口,参考org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount

int

-1

线程池里面的线程的数据,取值在1-100

org.quartz.threadPool.threadPriority

int

Thread.NORM_PRIORITY (5)

线程的优先级,取值在Thread.MINPRIORITY(1)到Threa.MAXPRIORITY(10)

org.quartz.threadPool.makeThreadsDaemons

boolean

false

指定在线程池里面创建的线程是否是守护线程

org.quartz.threadPool.threadsInheritGroupOfInitializingThread

boolean

true

线程是否属于继承自初始线程的线程组

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread

boolean

false

线程上下文类加载器是否继承自初始线程的加载器

org.quartz.threadPool.threadNamePrefix

String

[Scheduler Name]_Workder

指定线程池里面线程的名字的前缀

Listener配置

在实例化StdSchedulerFactory的时候可以注册一个全局的监听器到Scheduler中,全局监听器会监听每一个Job和Trigger的触发事件。全局监听器必选有一个无参的构造函数,并且属性值只能是基本类型(包括String)。

配置例子:

代码语言:javascript
复制
//trigger listener配置org.quartz.triggerListener.NAME = package.classNameorg.quartz.triggerListener.NAME.propName = propValue//job listener配置org.quartz.jobListener.NAME = package.classNameorg.quartz.jobListener.NAME.propName = propValue

JobStore配置

JobStore是Scheduler在运行时用来存储相关的信息的,比如Job, Trigger。

RAMJobStore

RAMJobStore实现类是在内存中存储信息的,程序一旦结束便丢失了相关的信息。

属性名称

是否必选

类型

默认值

说明

org.quartz.jobStore.class

String(类名)

org.quartz.simpl.RAMJobStore

指定使用的JobStore

org.quartz.jobStore.misfireThreshold

int

60000

触发器失败后下次触发的时间间隔

JDBCJobStore和JobStoreTX

JDBCJobStore和JobStoreTX都使用关系数据库来存储Schedule相关的信息。JobStoreTX在每次执行任务后都使用commint或者rollback来提交更改。

如果在一个标准的独立应用或者在一个没有使用JTA事务管理的应用中使用Quartz,JDBCJobStore是一个不错的选择。

JobStoreTX的配置如下:

属性名称

是否必选

类型

默认值

说明

org.quartz.jobStore.class

String(类名)

org.quartz.simpl.jdbcjobstore.JobStoreTX

使用JobStoreTX

org.quartz.jobStore.driverDelegateClass

String(类名)

null

使用的数据库驱动,具体的驱动列表详情如下

org.quartz.jobStore.dataSource

String

null

使用的数据源名称,具体参照数据源配置

org.quartz.jobStore.tablePrefix

String

QRTZ_

表的前缀

org.quartz.jobStore.userProperties

boolean

false

标示在JobDataMaps的数据全部是String

org.quartz.jobStore.misfireThreshold

int

60000

触发器触发失败后再次触犯的时间间隔

org.quartz.jobStore.isClustered

boolean

false

如果有多个调度器实体的话则必须设置为true

org.quartz.jobStore.clusterCheckinInterval

long

15000

检查集群下的其他调度器实体的事件间隔

org.quartz.jobStore.maxMisfiresToHandleAtATime

int

20

--

org.quartz.jobStore.dontSetAutoCommintFalse

boolean

false

--

org.quartz.jobStore.selectWithLockSQL

String

select * from {0}locks where schedname = {1} and lockname = ? for update

--

org.quartz.jobStore.txlsolationLevelSerializable

boolean

false

--

org.quartz.jobStore.acquireTriggersWithinLocal

boolean

false

--

org.quartz.jobStore.lockHandler.class

String

null

--

org.quartz.jobStore.driverDelegateInitString

String

null

--

org.quartz.jobStore.driverDelegateClass数据库驱动列表
  • org.quartz.impl.jdbcstore.StdJDBCDelegate 适用于完全兼容JDBC的驱动
  • org.quartz.impl.jdbcstore.MSSQLDelegate 适用于Miscrosoft SQL Server和Sybase数据库
  • org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
  • org.quartz.impl.jdbcjobstore.WebLogicDelegate
  • org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
  • org.quartz.impl.jdbcjobstore.oracle.WebLogicOracleDelegate
  • org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
  • org.quartz.impl.jdbcjobstore.CloudscapeDelegate
  • org.quartz.impl.jdbcjobstore.DB2v6Delegate
  • org.quartz.impl.jdbcjobstore.DB2v7Delegate
  • org.quartz.impl.jdbcjobstore.DB2v8Delegate
  • org.quartz.impl.jdbcjobstore.HSQLDBDelegate
  • org.quartz.impl.jdbcjobstore.PointbaseDelegate
  • org.quartz.impl.jdbcjobstore.SybaseDelegate
集群使用JDBCJobStore和JobStoreTX

在JobStore使用JDBCJobStore、JobStoreTX、JobStoreCMT的情况下可以使用Quartz的集群特性简单的配置如下:

代码语言:javascript
复制
//主要配置org.quartz.scheduler.instanceName = MyClusteredSchedulerorg.quartz.scheduler.instanceId = AUTO
//配置数据池连接org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount = 25org.quartz.threadPool.treadPriority = 5
//JobStore配置org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcstore.oracle.OracleDelegateorg.quartz.jobStore.userProperties = trueorg.quartz.jobStore.dataSource = myDSorg.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = trueorg.quartz.jobStore.clusterCheckinInterval = 20000
//DataSource数据源配置org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriverorg.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@localhost:1521:devorg.quartz.dataSource.myDS.user = quartzorg.quartz.dataSource.myDS.password = quartzorg.quartz.dataSource.myDS.maxConnections = 5org.quartz.dataSource.myDS.validationQuery=select 0 from dual

springboot starter

会进行自动配置,可以直接使用quartz,十分方便。

自动配置

jobStoreType:

配置

实战配置

代码语言:javascript
复制
spring.quartz.properties.org.quartz.scheduler.instanceName = clusteredSchedulerspring.quartz.properties.org.quartz.scheduler.instanceId = AUTO
spring.quartz.properties.org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXspring.quartz.properties.org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegatespring.quartz.properties.org.quartz.jobStore.tablePrefix = QRTZ_spring.quartz.properties.org.quartz.jobStore.isClustered = truespring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval = 10000spring.quartz.properties.org.quartz.jobStore.useProperties = false
spring.quartz.properties.org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPoolspring.quartz.properties.org.quartz.threadPool.threadCount = 2spring.quartz.properties.org.quartz.threadPool.threadPriority = 2spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
spring.quartz.job-store-type = jdbcspring.quartz.startup-delay=5sspring.quartz.jdbc.initialize-schema=alwaysspring.quartz.overwrite-existing-jobs=false
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发架构二三事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 表信息
  • 核心类信息
  • quartz配置
    • 主要配置
      • 线程池配置
        • Listener配置
          • JobStore配置
            • RAMJobStore
            • JDBCJobStore和JobStoreTX
            • 集群使用JDBCJobStore和JobStoreTX
        • springboot starter
          • 自动配置
            • jobStoreType:
              • 配置
                • 实战配置
                相关产品与服务
                对象存储
                对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档