zoukankan      html  css  js  c++  java
  • 调度器Quartz的配置文件中的线程池设置

    在使用调度器Quartz来进行数据归档的时候,当我们开的定时任务很多的时候,就会出现一些定时任务不会被触发的现象,这就是线程阻塞。那到底什么叫线程阻塞呢?

    线程阻塞,顾名思义就是说线程被阻塞了,没有按时执行,即定时任务没有被触发。那么为什么会出现中定时任务没被触发的现象呢?

    通过对调取器的调度原理的分析,我们可以知道:当正在执行的调度任务个数超过了调度器中设置的最大值时,就会出线程阻塞,调度任务延迟执行的现象。

    那么我们如何修改这个线程池中线程的最大个数,以满足我们的调度需求呢?通过查看其jar包我们可以找到线程池的配置文件如下所示:

    在下面这个包里:

    这里写图片描述

    我们可以找到配置文件如下:

    这里写图片描述

    我们需要copy一份这个属性文件,并在这个文件的基础上修改线程池的配置:

    #===============================================================        
    #配置文件不是必须的,Quartz对配置项都是有默认值的,当需要自定义的时候,
    #可以在classpath路径下放一个quartz.properties文件,Quartz的StdSchedulerFactory
    #在启动时会自动加载该配置文件。
    #===============================================================    
    
    
    #===============================================================        
    #配置主调度程序的属性        
    #===============================================================    
    org.quartz.scheduler.instanceName = DefaultQuartzScheduler
    org.quartz.scheduler.rmi.export = false
    org.quartz.scheduler.rmi.proxy = false
    org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
    #当检查某个Trigger应该触发时,默认每次只Acquire一个Trigger,(为什么要有Acquire的过程呢?是为了防止多线程访问的情况下,
    #同一个Trigger被不同的线程多次触发)。尤其是使用JDBC JobStore时,一次Acquire就是一个update语句,尽可能一次性的多获取
    #几个Trigger,一起触发,当定时器数量非常大的时候,这是个非常有效的优化。当定时器数量比较少时,触发不是极为频繁时,
    #这个优化的意义就不大了。
    org.quartz.scheduler.batchTriggerAcquisitionMaxCount=50
    
    #===============================================================        
    #配置线程池的属性
    #===============================================================          
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    #线程池里的线程数,默认值是10,当执行任务会并发执行多个耗时任务时,要根据业务特点选择线程池的大小。
    org.quartz.threadPool.threadCount = 4
    org.quartz.threadPool.threadPriority = 5
    org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
    
    #===============================================================        
    #配置JobStore的属性
    #===============================================================          
    org.quartz.jobStore.misfireThreshold = 60000
    org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

    注意:当我们在我们的项目中添加了quartz.properties的时候,我们需要把那些我们不需要修改的配置也加上,并不能只有我们修改的配置。因为通过查看源代码我们可以知道,调度器在初始化的时候,首先判断我们是否有quartz.properties,如果有的话,就是用我们系统中的配置文件,否则就从jar包里加载quartz.properties进行默认的初始化。

  • 相关阅读:
    Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
    无向图求点割集的算法
    hdu 2121无根最小树形图要建一个虚拟节点
    hdu 1576扩展欧几里得算法
    欧几里德算法的扩展-求解不定方程
    hdu 3072 强连通+缩点+最小树形图思想
    1352 集合计数 扩展欧几里德算法
    1247 可能的路径 逆向思维
    Atcoder B
    C. Timofey and a tree 观察题 + dfs模拟
  • 原文地址:https://www.cnblogs.com/jpfss/p/10856660.html
Copyright © 2011-2022 走看看