springboot使用quartz的配置

2019-08-30 22:22:39 浏览数 (1)

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

表信息

表名称

说明

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

0 人点赞