表信息、类信息、配置信息
表名称 | 说明 |
---|---|
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 | -- |
属性名称 | 是否必选 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
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 | 指定线程池里面线程的名字的前缀 |
在实例化StdSchedulerFactory的时候可以注册一个全局的监听器到Scheduler中,全局监听器会监听每一个Job和Trigger的触发事件。全局监听器必选有一个无参的构造函数,并且属性值只能是基本类型(包括String)。
配置例子:
//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是Scheduler在运行时用来存储相关的信息的,比如Job, Trigger。
RAMJobStore实现类是在内存中存储信息的,程序一旦结束便丢失了相关的信息。
属性名称 | 是否必选 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
org.quartz.jobStore.class | 否 | String(类名) | org.quartz.simpl.RAMJobStore | 指定使用的JobStore |
org.quartz.jobStore.misfireThreshold | 否 | int | 60000 | 触发器失败后下次触发的时间间隔 |
JDBCJobStore和JobStoreTX都使用关系数据库来存储Schedule相关的信息。JobStoreTX在每次执行任务后都使用commint或者rollback来提交更改。
如果在一个标准的独立应用或者在一个没有使用JTA事务管理的应用中使用Quartz,JDBCJobStore是一个不错的选择。
属性名称 | 是否必选 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
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 | -- |
在JobStore使用JDBCJobStore、JobStoreTX、JobStoreCMT的情况下可以使用Quartz的集群特性简单的配置如下:
//主要配置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
会进行自动配置,可以直接使用quartz,十分方便。
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