zoukankan      html  css  js  c++  java
  • Quartzs -- Quartz.properties 配置

    • 文件加载位置

    默认:优先顺序 Classpath:quartz.properties --> org/quartz/quartz.properties (quartz lib)

    改变默认:设置一个系统属性"org.quartz.properties"指向对应的properties文件

    • 程序中显示指定

    在StdSchedulerFactory.getScheduler()之前使用StdSchedulerFactory.initialize(xx)。

    • properties文件中的属性关系

    固定前缀org.quartz

    主要分为scheduler,ThreadPool,JobStore,plugin等等部分

    例如ThreadPool的配置信息

    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount = 5
    org.quartz.threadPool.threadPriority = 5

    实例化ThreadPool的时候使用org.quartz.simpl.SimpleThreadPool,

    实例化结束后threadCount,threadPriority 将以setter的形式注入到ThreadPool实例中

    • 属性值的复用

    $propertyName

    $@org.quartz.scheduler.instanceName

    • 官方配置文档

    http://www.quartz-scheduler.org/documentation/quartz-1.x/configuration/

    • threadPool

    #Quartz ThreadPool

    org.quartz.threadPool.class=threadPool类名(SimpleThreadPool就好)

    org.quartz.threadPool.threadCount=thread数量,不会动态增长(所有的JOB)

    org.quartz.threadPool.threadPriority=thread优先级

    #Quartz SimpleThreadPool(使用默认就好)

    #org.quartz.threadPool.makeThreadsDaemons=true/false是否为守护线程

    #org.quartz.threadPool.threadsInheritGroupOfInitializingThread=true/false

    #org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true/false

    • jobStore

    1)RAMJobStore

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

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

    misfireThreshold : 最大能忍受的触发超时时间,如果超过则认为“失误”

    2)JDBC-JobStore

    将schedule相关信息保存在RDB中.有两种实现:JobStoreTX和JobStoreCMT

    前者为application自己管理事务

    后者为application server管理事务,即全局事务JTA

    JobStoreTX

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

    org.quartz.jobStore.driverDelegateClass

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

    #这个值必须存于一个datasource的配置信息

    #org.quartz.dataSource.XXX.driver...

    org.quartz.jobStore.tablePrefix

    #存储相关信息表的前缀

    org.quartz.jobStore.useProperties

    #JobDataMaps是否都为String类型

    org.quartz.jobStore.misfireThreshold

    #与RAMJobStore中的一致

    org.quartz.jobStore.isClustered

    #是否是应用在集群中,当应用在集群中时必须设置为TRUE,否则会出错org.quartz.jobStore.clusterCheckinInterval

    #scheduler的checkin时间,时间长短影响failure scheduler的发现速度

    org.quartz.jobStore.maxMisfiresToHandleAtATime

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

    org.quartz.jobStore.dontSetAutoCommitFalse

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

    org.quartz.jobStore.selectWithLockSQL

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

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

    org.quartz.jobStore.txIsolationLevelSerializable

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

    org.quartz.jobStore.acquireTriggersWithinLock

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

    org.quartz.jobStore.lockHandler.class

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

    • dataSource

    建议最大的连接数最少为ThreadPool的threadCount,并且如果应用经常访问scheduler的API的话最好是有一些额外的connection,也就是说要比ThreadPool的worker threads大一些

    三种方式

    1)datasource的相关信息全部定义于quartz.properties中,quartz自己创建datasource

    org.quartz.dataSource.NAME.driver

    org.quartz.dataSource.NAME.URL

    org.quartz.dataSource.NAME.user

    org.quartz.dataSource.NAME.password

    org.quartz.dataSource.NAME.maxConnections

    #以上为dataSource的基本属性,大家都懂的

    #NAME必须与$@org.quartz.jobStore.dataSource一致

    org.quartz.dataSource.NAME.validationQuery

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

    2)使用JNDI的datasource

    org.quartz.dataSource.NAME.jndiURL

    #JNDI URL

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

    #JNDI InitialContextFactory

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

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

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

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

    3)用户自定义org.quartz.utils.ConnectionProvider实现类

    org.quartz.dataSource.NAME.connectionProvider.class

    org.quartz.dataSource.NAME.XXX

    • Cluster



    实现故障处理和负载均衡,实现高可用性和扩展性

    通过共享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.不实现集群的实例不使用同一套表

  • 相关阅读:
    MongoDB,无模式文档型数据库简介
    数据说话:怎样的程序员最抢手?
    猛醒:也许我们一生追求的都错了!
    中国风电生产监控平台界面
    如何跟着趋势去赚钱
    2015年最好的员工心态培养 -- 我们需要把简单的事情做到极致
    什么是程序员的核心竞争力?
    第一篇 技术选型
    .net core 读取配置文件
    .net core nlog记录日志
  • 原文地址:https://www.cnblogs.com/Rozdy/p/4284339.html
Copyright © 2011-2022 走看看