Quartz配置信息

本文围绕Quartz展开,介绍了其主要配置,包括线程池、Listener配置。重点阐述了JobStore配置,如RAMJobStore在内存存储信息,程序结束信息丢失;JDBCJobStore和JobStoreTX用关系数据库存储信息,还列出了数据库驱动列表。此外,说明了在特定JobStore下可使用Quartz的集群特性。

1. Quartz主要配置

属性名称是否必选类型默认值说明
org.quartz.scheduler.instanceNameStringQuartzSchedulerSchedule调度器的实体名字
org.quartz.scheduler.instanceIdStringNON_CLUSTEREDSchedule调度器的实体的Id,必须唯一。 1. 当你想生成intanceId的时候可以设置为AUTO 2. 当你想从系统属性org.quartz.scheduler.instanceId取值时可以设置为SYS_PROP
org.quartz.scheduler.instanceIdGenerator.classString(类名)org.quartz.simpl.SimpleInstanceIdGenerator生成Schudule实体Id的类,只有在属性org.quartz.scheduler.instanceId设置为AUTO时使用,默认的实现org.quartz.scheduler.SimpleInstanceGenerator是基于主机名称和时间戳生成。其他的实现查看具体的文档
org.quartz.scheduler.threadNameStringinstanceName + ‘_QuartzSchedulerThread’Scheduler线程的名称
org.quartz.scheduler.makeSchedulerThreadDaemonbooleanfalse指定Scheduler是否以守护线程(服务)运行
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializerbooleanfalse目前不太理解
org.quartz.scheduler.idleWaitTimelong30000当调度程序空闲时,在重新查询可用触发器之前,调度程序将等待毫秒的时间数。不建议少于5000ms,而少于1000是不合法的参数
org.quartz.scheduler.doFailureRetryIntervallong15000使用JobStore(比如连接数据库)时Schueduler检测到失去数据库连接后重新尝试连接的毫秒数
org.quartz.scheduler.classLoadHelper.classString(类名)org.quartz.simpl.CascadingClassLoaderHelper目前不太了解
org.quartz.scheduler.jobFactory.classString(类名)org.quartz.simpl.PropertySettingJobFctory给Scheduler Context、Job、Trigger的JobDataMaps设置属性值的方式
org.quartz.contenxt.key.SOME_KEYStringNone键值对,保存在Scheduler Context中,比如有这样的配置org.quartz.shceduler.key.MyKey=MyValue,则在Scheduler Context中赋值方式为scheduler.getContext().put(“MyKey”, “MyValue”
org.quartz.scheduler.userTransactionURLString(url)java:comp/UserTransaction事务管理JNDI URL地址。只有当Quartz使用JobStoreCMT和org.quartz.scheduler.wrapJobExecutionInUserTransaction 设置为true时使用
org.quartz.scheduler.wrapJobExecutionInUserTransactionbooleanfalse只有当你在执行一个Job时想使用UserTransaction时设置为true,参考@ExecuteInJTATransaction 注解
org.quartz.scheduler.skipUpdateCheckbooleanfalse是否跳过版本检测。可以设置系统参数org.terracotta.quartz.skipUpdateCheck=true或者在JAVA命令行使用-D选项。在正式库运行时应设置为true。
org.quartz.scheduler.batchTriggerAcquisitionMaxCountint1在同一时间运行Scheduler获取trigger的数量。如果设置的数量>1,并且使用JDBC JobStore,则属性org.quartz.jobStore.acquireTriggersWithinLock应设置为true,可以避破坏数据。
org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindowlong0运行Scheduler在获取和触发tigger的提前的时间。

2. 线程池配置

2.1 主要配置
属性名称是否必选类型默认值说明
org.quartz.threadPool.classString(类名)nullScheduler使用的线程池名称,实现了ThreadPool接口,参考org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCountint-1线程池里面的线程的数据,取值在1-100
org.quartz.threadPool.threadPriorityintThread.NORM_PRIORITY (5)线程的优先级,取值在Thread.MIN_PRIORITY(1)到Threa.MAX_PRIORITY(10)
2.2 线程池的简单配置
属性名称是否必选类型默认值说明
org.quartz.threadPool.makeThreadsDaemonsbooleanfale指定在线程池里面创建的线程是否是守护线程
org.quartz.threadPool.threadsInheritGroupOfInitializingThreadbooleantrue
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThreadbooleanfalse
org.quartz.threadPool.threadNamePrefixString[Scheduler Name]_Workder指定线程池里面线程的名字的前缀

3. Listener配置

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

配置例子:

//trigger listener配置
org.quartz.triggerListener.NAME = package.className
org.quartz.triggerListener.NAME.propName = propValue
//job listener配置
org.quartz.jobListener.NAME = package.className
org.quartz.jobListener.NAME.propName = propValue
123456

4. JobStore配置

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

4.1 RAMJobStore

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

属性名称是否必选类型默认值说明
org.quartz.jobStore.classString(类名)org.quartz.simpl.RAMJobStore指定使用的JobStore
org.quartz.jobStore.misfireThresholdint60000触发器失败后下次触发的时间间隔
4.2 JDBCJobStore和JobStoreTX

JDBCJobStore和JobStoreTX都使用关系数据库来存储Schedule相关的信息。

JobStoreTX在每次执行任务后都使用commint或者rollback来提交更改。

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

JobStoreTX的配置如下:

属性名称是否必选类型默认值说明
org.quartz.jobStore.classString(类名)org.quartz.simpl.jdbcjobstore.JobStoreTX使用JobStoreTX
org.quartz.jobStore.driverDelegateClassString(类名)null使用的数据库驱动,具体的驱动列表详情如下
org.quartz.jobStore.dataSourceStringnull使用的数据源名称,具体参照数据源配置
org.quartz.jobStore.tablePrefixStringQRTZ_表的前缀
org.quartz.jobStore.userPropertiesbooleanfalse标示在JobDataMaps的数据全部是String
org.quartz.jobStore.misfireThresholdint60000触发器触发失败后再次触犯的时间间隔
org.quartz.jobStore.isClusteredbooleanfalse如果有多个调度器实体的话则必须设置为true
org.quartz.jobStore.clusterCheckinIntervallong15000检查集群下的其他调度器实体的事件间隔
org.quartz.jobStore.maxMisfiresToHandleAtATimeint20
org.quartz.jobStore.dontSetAutoCommintFalsebooleanfalse
org.quartz.jobStore.selectWithLockSQLStringselect * from {0}locks where sched_name = {1} and lock_name = ? for update
org.quartz.jobStore.txlsolationLevelSerializablebooleanfalse
org.quartz.jobStore.acquireTriggersWithinLocalbooleanfalse
org.quartz.jobStore.lockHandler.classStringnull
org.quartz.jobStore.driverDelegateInitStringStringnull
4.2.1 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

5. 集群,使用JDBCJobStore和JobStoreTX

在JobStore使用JDBCJobStore、JobStoreTX、JobStoreCMT的情况下可以使用Quartz的集群特性,示意图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9gUw9lxE-1600909146358)(http://i.imgur.com/t2sYsyp.png)]

简单的配置如下:

//主要配置
org.quartz.scheduler.instanceName = MyClusteredScheduler
org.quartz.scheduler.instanceId = AUTO

//配置数据池连接
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 25
org.quartz.threadPool.treadPriority = 5

//JobStore配置
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcstore.oracle.OracleDelegate
org.quartz.jobStore.userProperties = true
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000

//DataSource数据源配置
org.quartz.dataSource.myDS.driver = oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.myDS.URL = jdbc:oracle:thin:@localhost:1521:dev
org.quartz.dataSource.myDS.user = quartz
org.quartz.dataSource.myDS.password = quartz
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery=select 0 from dual
uartz.dataSource.myDS.password = quartz
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery=select 0 from dual
### Quartz 配置文件示例及相关说明 Quartz 是一种流行的任务调度框架,其配置主要通过 `quartz.properties` 文件完成。该文件定义了调度器的行为、线程池设置以及其他必要的参数。以下是关于 Quartz 配置文件的详细示例和说明: #### 基础配置项 以下是一个标准的 `quartz.properties` 配置文件示例[^1]: ```properties # 调度器实例名称 org.quartz.scheduler.instanceName = MySchedulerInstance # 自动生成实例 ID org.quartz.scheduler.instanceId = AUTO # 线程池配置 org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 10 org.quartz.threadPool.threadPriority = 5 # Job 存储方式(内存存储) org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore ``` - **scheduler.instanceName**: 定义调度器实例的名字。 - **scheduler.instanceId**: 如果设为 `AUTO`,则会自动分配唯一的实例 ID,在集群环境中非常有用。 - **threadPool.threadCount**: 表示线程池中可用线程的数量,默认值通常是 10。 - **jobStore.class**: 指定任务存储的方式。这里使用的是内存存储 (`RAMJobStore`),适合简单的应用场景。 #### 数据库持久化配置 当需要将任务信息保存到数据库时,可以修改 `jobStore.class` 属性,并添加相应的 JDBC 参数[^3]: ```properties # 使用数据库作为任务存储 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX # JDBC 代理类 org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate # 数据库表前缀 org.quartz.jobStore.tablePrefix = QRTZ_ # 启用集群模式 org.quartz.jobStore.isClustered = true # 集群节点检查时间间隔(单位:毫秒) org.quartz.jobStore.clusterCheckinInterval = 10000 # 数据源别名 org.quartz.dataSource.myDS.connectionProvider.class = org.quartz.utils.C3P0ConnectionProvider org.quartz.dataSource.myDS.jndiURL = java:/comp/env/jdbc/myDS ``` - **jobStore.class**: 切换至基于事务的 JDBC 实现 (`JobStoreTX`)。 - **driverDelegateClass**: 指定具体的 JDBC 代理实现。 - **tablePrefix**: 数据库中 Quartz 所有表的前缀默认为 `QRTZ_`。 - **isClustered**: 开启集群支持后,多个节点共享同一个数据库。 - **clusterCheckinInterval**: 控制集群成员之间的心跳频率。 #### Spring 整合下的 Quartz 配置 在 Spring 应用程序中,可以通过 XML 或 Java Config 方式简化 Quartz配置过程[^2]。下面展示了一个基于 Java Config 的例子: ```java @Configuration public class QuartzConfig { @Bean public JobDetail jobDetail() { return JobBuilder.newJob(MyJob.class).withIdentity("myJob").build(); } @Bean public Trigger trigger(JobDetail jobDetail) { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever(); return TriggerBuilder.newTrigger().forJob(jobDetail) .withSchedule(scheduleBuilder) .build(); } @Bean public SchedulerFactoryBean schedulerFactoryBean(Trigger trigger, JobDetail jobDetail) { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setOverwriteExistingJobs(true); factory.setTriggers(trigger); Properties quartzProperties = new Properties(); quartzProperties.put("org.quartz.scheduler.instanceName", "SpringScheduler"); quartzProperties.put("org.quartz.threadPool.threadCount", "5"); factory.setQuartzProperties(quartzProperties); return factory; } } ``` - **JobDetail**: 定义具体要执行的任务。 - **Trigger**: 设定触发条件,比如每隔多少秒运行一次。 - **SchedulerFactoryBean**: 将 Quartz 配置封装起来并与 Spring 上下文集成。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值