我们通常是通过quartz.properties属性配置文件(默认情况下均使用该文件)结合StdSchedulerFactory 来使用Quartz的。StdSchedulerFactory 会加载属性配置文件并实例化一个Scheduler

默认情况下,Quartz会加载classpath下的”quartz.properties”文件作为配置属性,如果找不到会使用quartz框架自己jar下org/quartz包底下的”quartz.properties”文件。当然你也可以指定”org.quartz.properties”属性指向你自定义的属性配置文件。或者,你也可以在调用StdSchedulerFactory的 getScheduler()方法之前调用 initialize(xx)初始化factory配置。

在配置文件中你可以使用”$@”引用其他属性配置。

#============================================================================
Configure Main Scheduler Properties 调度器属性
#============================================================================

# 在集群中每个实例都必须有一个唯一的instanceId,但是应该有一个相同的instanceName【默认“QuartzScheduler”】【非必须】
org.quartz.scheduler.instanceName = MyClusteredScheduler

# Scheduler实例ID,全局唯一,【默认值NON_CLUSTERED】,或者可以使用“SYS_PROP”通过系统属性设置id。【非必须】
org.quartz.scheduler.instanceId = AUTO

# 只有在”org.quartz.scheduler.instanceId”设置为”AUTO”的时候才使用该属性设置。

# 默认情况下,“org.quartz.simpl.SimpleInstanceIdGenerator”是基于instanceId和时间戳来自动生成的。

# 其他的id生成器的实现包括 SystemPropertyInstanceIdGenerator 从系统属性获取 “org.quartz.scheduler.instanceId”, 和 HostnameInstanceIdGenerator 使用主机名 (InetAddress.getLocalHost().getHostName())。也可以自定义生成方式【默认org.quartz.simpl.SimpleInstanceIdGenerator】【非必须】

#org.quartz.scheduler.instanceIdGenerator.class = org.quartz.simpl.SimpleInstanceIdGenerator

# 指定线程名,如果不指定的话,会自动使用org.quartz.scheduler.instanceName属性值加上后缀字符串”_QuartzSchedulerThread”.【默认instanceName+’_QuartzSchedulerThread’】【非必须】

#org.quartz.scheduler.threadName =

# 指定scheduler的主线程是否为后台线程,【默认false【非必须】

#org.quartz.scheduler.makeSchedulerThreadDaemon = false

# 指定Quartz生成的线程是否继承初始化线程的上下文类加载器。这会影响Quartz的主调度线程、JDBCJobStore的”熄火”处理线程、集群回复线程和线程池里的线程。 将该值设置为“true”可以帮助类加载,JNDI查找,并在应用程序服务器上使用Quartz等相关问题,【默认false】【非必须】

#org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer = false

# 在调度程序空闲的时候,重复查询是否有可用触发器的等待时间。通常并不会设置为true,除非你是用XA事务,并且延迟触发会导致问题的场景。 5000ms以下是不推荐的,因为它会导致过的的数据库查询。1000ms以下是非法的。【默认30000【非必须】

#org.quartz.scheduler.idleWaitTime = 30000

# 连接超时重试连接的间隔。使用 RamJobStore时,该参数并没什么用【默认15000】【非必须】

#org.quartz.scheduler.dbFailureRetryInterval = 15000

# 最可靠的方式就是使用【默认”org.quartz.simpl.CascadingClassLoadHelper”】,没必要指定其他类【非必须】

#org.quartz.scheduler.classLoadHelper.class = org.quartz.simpl.CascadingClassLoadHelper

# 指定JobFactory的类(接口)名称。负责实例化jobClass。【默认”org.quartz.simpl.PropertySettingJobFactory”】,只是在job被执行的时候简单调用newInstance()实例化一个job类。PropertySettingJobFactory 会使用反射机制通过SchedulerContext、 Job、Trigger和 JobDataMaps设置job bean的属性。在使用JTA事务时,可设置事务相关的属性【非必须】

#org.quartz.scheduler.jobFactory.class = org.quartz.simpl.PropertySettingJobFactory

#org.quartz.context.key.SOME_KEY = none

# 设置Quartz能够加载UserTransaction换利器的JNDI的 URL。Websphere 的用户可能会设置为“jta/usertransaction。只有在Quartz使用JobStoreCMT的时候,才会使用该属性,并且org.quartz.scheduler.wrapJobExecutionInUserTransaction也会设置为true。默认【默认值是”java:comp/UserTransaction”【非必须】

#org.quartz.scheduler.userTransactionURL = java:comp/UserTransaction

# 如果想使用Quartz在执行一个job前使用UserTransaction,则应该设置该属性为true。job执行完、在JobDataMap改变之后事务会提交。默认值是false。 可以在你的job类中使用 @ExecuteInJTATransaction注解, 可以控制job是否使用事务。【默认false【非必须】

#org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

# 建议设置为“org.terracotta.quartz.skipUpdateCheck=true”不会在程序运行中还去检查quartz是否有版本更新。【默认false】【非必须】

#org.quartz.scheduler.skipUpdateCheck = true

# 许调度程序一次性触发的触发器数量。.默认值是1。值越大一次性触发的任务就可以越多,但是在集群环境【非必须】下,不建议设置为很大值。如果值 > 1, 并且使用了 JDBC JobStore的话, org.quartz.jobStore.acquireTriggersWithinLock属性必须设置为true,以避免”弄脏”数据。【默认1】

#org.quartz.scheduler.batchTriggerAcquisitionMaxCount = 1

# 允许触发器被获取并在其预定的触发时间之前触发的数量。【默认0【非必须】

#org.quartz.scheduler.batchTriggerAcquisitionFireAheadTimeWindow = 0

#============================================================================
# Configure ThreadPool 线程池属性
#============================================================================

# 线程池的实现类(定长线程池,几乎可满足所有用户的需求)【默认null】【必须】
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

# 指定线程数,至少为1(无默认值)(一般设置为1-100直接的整数合适)【默认-1】【必须】
org.quartz.threadPool.threadCount = 25

# 设置线程的优先级(最大为java.lang.Thread.MAX_PRIORITY 10,最小为Thread.MIN_PRIORITY 1)【默认Thread.NORM_PRIORITY (5)】【非必须】
org.quartz.threadPool.threadPriority = 5

# ------------------设置SimpleThreadPool的一些属性,一般使用默认值-------------------------------
# 设置是否为守护线程
#org.quartz.threadpool.makethreadsdaemons = false

#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#org.quartz.threadpool.threadsinheritgroupofinitializingthread = false

#线程前缀默认值是:[Scheduler Name]_Worker

#org.quartz.threadpool.threadnameprefix = swhJobThead;

# ------------------------配置全局监听(TriggerListener,JobListener) 则应用程序可以接收和执行 预定的事件通知

# Configuring a Global TriggerListener 配置全局的Trigger监听器。

# MyTriggerListenerClass 类必须有一个无参数的构造函数,和 属性的set方法,目前2.2.x只支持原始数据类型的值(包括字符串)
#org.quartz.triggerListener.NAME.class = com.swh.MyTriggerListenerClass

#org.quartz.triggerListener.NAME.propName = propValue

#org.quartz.triggerListener.NAME.prop2Name = prop2Value

# Configuring a Global JobListener 配置全局的Job监听器

# MyJobListenerClass 类必须有一个无参数的构造函数,和 属性的set方法,目前2.2.x只支持原始数据类型的值(包括字符串)

#org.quartz.jobListener.NAME.class = com.swh.MyJobListenerClass

#org.quartz.jobListener.NAME.propName = propValue

#org.quartz.jobListener.NAME.prop2Name = prop2Value

#============================================================================

# Configure JobStore 配置数据存储的方式
#============================================================================

# ------------------------使用RAMJobStore配置

# 将schedule相关信息保存在RAM中,轻量级,速度快,遗憾的是应用重启时相关信息都将丢失。

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

# 最大能忍受的触发超时时间(触发器被认定为“misfired”之前),如果超过则认为“失误”【默认60秒】
org.quartz.jobStore.misfireThreshold = 60000

# ------------------------使用JDBCJobStore配置

# 所有的quartz数据例如job和Trigger的细节信息被保存在内存或数据库中,有两种实现:JobStoreTX(自己管理事务)和JobStoreCMT(application server管理事务,即全局事务JTA)

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

# 最大能忍受的触发超时时间(触发器被认定为“misfired”之前),如果超过则认为“失误”【默认60秒】

org.quartz.jobStore.misfireThreshold = 60000

# 类似于Hibernate的dialect,用于处理DB之间的差异,StdJDBCDelegate能满足大部分的DB

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

# 配置数据源的名称,在后面配置数据源的时候要用到,例如org.quartz.dataSource.clusterDS.driver = com.mysql.jdbc.Driver

org.quartz.jobStore.dataSource = clusterDS

# 数据表前缀

org.quartz.jobStore.tablePrefix = QRTZ_

# 为了指示JDBCJobStore所有的JobDataMaps中的值都是字符串,并且能以“名字-值”对的方式存储而不是以复杂对象的序列化形式存储在BLOB字段中,应该设置为true(缺省方式)

org.quartz.jobStore.useProperties = true

# 是否集群、负载均衡、容错,如果应用在集群中设置为false会出错

org.quartz.jobStore.isClustered = true

# 检入到数据库中的频率(毫秒)。检查是否其他的实例到了应当检入的时候未检入这能指出一个失败的实例,且当前Scheduler会以此来接管执行失败并可恢复的Job通过检入操作,Scheduler也会更新自身的状态记录
org.quartz.jobStore.clusterCheckinInterval = 20000

# jobStore处理未按时触发的Job的数量

#org.quartz.jobStore.maxMisfiresToHandleAtATime = 20

# true/false,true则调用connection的setAutoCommit(false)方法

org.quartz.jobStore.dontSetAutoCommitFalse = true

# 加锁的SQL语句,默认为SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE

# {0}=$@org.quartz.jobStore.tablePrefix

org.quartz.jobStore.selectWithLockSQL = false

# true/false, true则调用connection的setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE) 方法

org.quartz.jobStore.txIsolationLevelSerializable = false

# 触发job时是否需要拥有锁

org.quartz.jobStore.acquireTriggersWithinLock = true

# 用于管理数据库中相关信息的锁机制的类名

org.quartz.jobStore.lockHandler.class =

#============================================================================
# Configure Datasources 数据源
#============================================================================

# ------------------------使用常规数据源配置

# 数据库驱动

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

# 数据库连接地址

org.quartz.dataSource.NAME.URL = jdbc:mysql://${mysql.address}/etc-quartz?useUnicode=true&characterEncoding=utf8

# 数据库用户名

org.quartz.dataSource.NAME.user = ${mysql.user}

# 数据库密码

org.quartz.dataSource.NAME.password = ${mysql.password}

# 数据库最大连接数(如果Scheduler很忙,比如执行的任务与线程池的数量差不多相同,那就需要配置DataSource的连接数量为线程池数量+1)

org.quartz.dataSource.NAME.maxConnections = 30

# dataSource用于检测connection是否failed/corrupt的SQL语句

org.quartz.dataSource.NAME.validationQuery=select RAND()

# ------------------------使用JNDI数据源配置

# JNDI URL

org.quartz.dataSource.NAME.jndiURL =

# JNDI InitialContextFactory

org.quartz.dataSource.NAME.java.naming.factory.initial =

# 后三行为连接到JNDI提供者的相关信息

org.quartz.dataSource.NAME.java.naming.provider.url =

org.quartz.dataSource.NAME.java.naming.security.principal =

org.quartz.dataSource.NAME.java.naming.security.credentials =

# ------------------------用户自定义org.quartz.utils.ConnectionProvider实现类

org.quartz.dataSource.NAME.connectionProvider.class =

org.quartz.dataSource.NAME.XXX =

-----------

实现故障处理和负载均衡,实现高可用性和扩展性通过共享DB Tables实现,所以必须使用JDBC-Jobstore

负载均衡 : 谁先触发谁执行,并且一次只有一个scheduler触发

故障处理 : 当一个scheduler失败后,其它的实例可以发现那些执行失败的Jobs,假如Job对应的JobDetail标记为recovery(属性"requests recovery"),那么该Job就会被其它的实例重新执行,否则对应的Job只会被释放等待下次被触发。

实现:

org.quartz.jobStore.isClustered = true

所有的实例的quartz.properties文件除了org.quartz.scheduler.instanceId和org.quartz.threadPool.threadCount必须一致,org.quartz.scheduler.instanceId = AUTO 即可实现ID的不一致

注意:

1.不在不同的机器上实现集群功能,除非他们的时钟同步精确到秒

2.不实现集群的实例不使用同一套表

#============================================================================
# Configure Plugins 插件配置
#============================================================================

# 配置trigger执行历史日志(可以看到类的文档和参数列表)

org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin

org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}

org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}

# 加载 Job 和 Trigger 信息的类 (1.8之前用:org.quartz.plugins.xml.JobInitializationPlugin)

#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin

# 指定存放调度器(Job 和 Trigger)信息的xml文件,默认是classpath下quartz_jobs.xml

#org.quartz.plugin.jobInitializer.fileNames = quartz_data.xml

#org.quartz.plugin.jobInitializer.failOnFileNotFound = true

覆盖任务调度器中同名的jobDetail,避免只修改了CronExpression所造成的不能重新生效情况

#org.quartz.plugin.jobInitializer.overWriteExistingJobs = true

# 自动扫描任务单并发现改动的时间间隔,单位为秒。设置为0表示不自动加载

org.quartz.plugin.jobInitializer.scanInterval = 120

# 覆盖任务调度器中同名的jobDetail,避免只修改了CronExpression所造成的不能重新生效情况

org.quartz.plugin.jobInitializer.wrapInUserTransaction = false

# ===========================================================================  

# Sample configuration of ShutdownHookPlugin  ShutdownHookPlugin插件的配置样例

# ===========================================================================

#org.quartz.plugin.shutdownhook.class = \org.quartz.plugins.management.ShutdownHookPlugin

#org.quartz.plugin.shutdownhook.cleanShutdown = true

# Configure RMI Settings 远程服务调用配置

# 如果你想quartz-scheduler出口本身通过RMI作为服务器,然后设置“出口”标志true(默认值为false)。

#org.quartz.scheduler.rmi.export = false

# 主机上rmi注册表(默认值localhost)

#org.quartz.scheduler.rmi.registryhost = localhost

# 注册监听端口号(默认值1099)

#org.quartz.scheduler.rmi.registryport = 1099

# 创建rmi注册,false/never:如果你已经有一个在运行或不想进行创建注册

# true/as_needed:第一次尝试使用现有的注册,然后再回来进行创建

# always:先进行创建一个注册,然后再使用回来使用注册

#org.quartz.scheduler.rmi.createregistry = never

#Quartz Scheduler服务端端口,默认是随机分配RMI注册表

#org.quartz.scheduler.rmi.serverport = 1098

# true:链接远程服务调度(客户端),这个也要指定registryhost和registryport,默认为false

# 如果export和proxy同时指定为true,则export的设置将被忽略

# ===========================================================================

# Configuring a Global TriggerListener 配置全局的Trigger监听器

# MyTriggerListenerClass 类必须有一个无参数的构造函数,和 属性的set方法,目前2.2.x只支持原始数据类型的值(包括字符串)

# ===========================================================================

#org.quartz.triggerListener.NAME.class = com.swh.MyTriggerListenerClass

#org.quartz.triggerListener.NAME.propName = propValue

#org.quartz.triggerListener.NAME.prop2Name = prop2Value

# ===========================================================================

# Configuring a Global JobListener 配置全局的Job监听器

# MyJobListenerClass 类必须有一个无参数的构造函数,和 属性的set方法,目前2.2.x只支持原始数据类型的值(包括字符串)

# ===========================================================================

#org.quartz.jobListener.NAME.class = com.swh.MyJobListenerClass

#org.quartz.jobListener.NAME.propName = propValue

#org.quartz.jobListener.NAME.prop2Name = prop2Value

【配置详解】Quartz配置文件详解的更多相关文章

  1. quartz配置文件详解

    quartz配置文件详解(转载)     quartz学习总结: 一.关于job:    用Quartz的行话讲,作业是一个执行任务的简单Java类.任务可以是任何Java代码.只需你实现org.qu ...

  2. keepalived原理(主从配置+haproxy)及配置文件详解

    下图描述了使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1.web2.web3.img1.img2.但是由于haproxy会存在单点故障问题,因此使 ...

  3. tomcat配置文件详解

    Tomcat系列之服务器的安装与配置以及各组件详解   tomcat 配置文件详解

  4. [svc]tomcat配置文件详解

    Tomcat系列之服务器的安装与配置以及各组件详解 tomcat 配置文件详解 tomcat安全管理规范

  5. GRUB2配置详解:默认启动项,超时时间,隐藏引导菜单,配置文件详解,图形化配置

    配置文件详解: /etc/default/grub # 设定默认启动项,推荐使用数字 GRUB_DEFAULT=0 # 注释掉下面这行将会显示引导菜单 #GRUB_HIDDEN_TIMEOUT=0 # ...

  6. Tomcat配置(二):tomcat配置文件server.xml详解和部署简介

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. Nginx配置配置文件详解

    文章目录 配置文件 nginx.conf配置文件详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 事件相关配置 Fastcgi相关配置参数 常需要调整的参数 nginx作 ...

  8. vsftpd配置文件详解 ---配置解说

    vsftpd配置文件详解     1.默认配置: 1>允许匿名用户和本地用户登陆.      anonymous_enable=YES      local_enable=YES 2>匿名 ...

  9. Quartz学习——SSMM(Spring+SpringMVC+Mybatis+Mysql)和Quartz集成详解(四)

    当任何时候觉你得难受了,其实你的大脑是在进化,当任何时候你觉得轻松,其实都在使用以前的坏习惯. 通过前面的学习,你可能大致了解了Quartz,本篇博文为你打开学习SSMM+Quartz的旅程!欢迎上车 ...

随机推荐

  1. Cocos Creator学习目录

    目录 安装和启动 文件结构 编辑器基础 基本概念 (场景树 节点 坐标 组件 ) Cocos Creator 脚本简介 Cocos Creator调试 节点 cc.Node 组件开发cc.Compon ...

  2. yii2 modules模块配置指南

    在Yii2 中模块是可以无限级嵌套的,也就是说,模块可以包含另一个包含模块的模块,我们称前者为父模块,后者为子模块, 子模块必须在父模块的yiibaseModule::modules属性中申明,例如: ...

  3. locust 的使用

    Contents Locust这一款开源性能测试工具.然而,当前在网络上针对Locust的教程极少,不管是中文还是英文,基本都是介绍安装方法和简单的测试案例演示,但对于较复杂测试场景的案例演示却基本没 ...

  4. impala与hive的比较以及impala的有缺点

    最近读的几篇关于impala的文章,这篇良心不错:https://www.biaodianfu.com/impala.html(本文截取部分内容) Impala是Cloudera公司主导开发的新型查询 ...

  5. Spring SpringBoot和SpringCloud的关系

    Spring SpringBoot和SpringCloud的关系 Spring Cloud 是完全基于 Spring Boot 而开发,Spring Cloud 利用 Spring Boot 特性整合 ...

  6. JS中对象与数组(大括号{}与中括号[])

    一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...

  7. Logstash 安装和使用

    下载地址 https://artifacts.elastic.co/downloads/logstash/logstash-5.6.8.zip 下载后解压,测试 #将键盘内容输出到控制台 logsta ...

  8. getopt_long_only

    st_i2c_parser.c中用到,遂学习一下: 参考:https://blog.csdn.net/pengrui18/article/details/8078813 https://blog.cs ...

  9. GO语言学习笔记之Linux环境下安装GO语言

    0x00 安装环境和GO版本 本篇是源码安装,非使用包管理工具安装. # Centos 7.4 # GO v1.11.2 0x01 下载GO安装包 # wget https://dl.google.c ...

  10. Bayesian Program Synthesis - 初步探索