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

posted @ 2019-05-13 15:02  星朝  阅读(4664)  评论(0编辑  收藏  举报