• 调度器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进行默认的初始化。

  • 相关阅读:
    设计模式学习心得5
    HTTP协议 (六) 状态码详解
    HTTP协议 (五) 代理
    HTTP协议 (四) 缓存
    HTTP协议 (三) 压缩
    HTTP协议 (二) 基本认证
    HTTP协议 (一) HTTP协议详解
    java中abstract和interface的區別(轉)
    基于TCP的字符串传输程序
    文件比较
  • 原文地址:https://www.cnblogs.com/jpfss/p/10856660.html
Copyright © 2020-2023  润新知