Quartz 是个开放源码项目,提供了丰富的作业调度集。接口简单而强大。Quartz还提供了我们项目开发中的个性实现。默认的Quartz配置如下:
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
从这里我们可以看到默认的Quartz同时最多只能执行10个任务(org.quartz.threadPool.threadCount = 10)。执行优先权是先到先执行(FIFO),也就是队列执行。
如果我们的项目中有比较特殊的要求,比如我们一台服务器上可以同时执行50个任务;或者我们要对某一类任务的同时执行数就性限制,就是想要更加细化的控制。
如果仅仅是对同时执行数就行控制的话,我在自己的/src的下面建立一个quartz.properties配置文件,拷贝默认的配置内容后,修改org.quartz.threadPool.threadCount =想要的同时执行数。
例如:org.quartz.threadPool.threadCount =50
如果我们需要对某一类作业的同时作业数进行限制,这个限制在具体的系统中是必要的,比如邮件批发送,数据抽出。因为占用资源较多,如果不限制的话,服务器负担很大。要实现这样的功能的话,就得自己写一个个性话的org.quartz.threadPool.class线程池类。然后修改org.quartz.threadPool.class=自己的个性化线程池类。
Quartz可以设置多中调度方法,比如即时执行,预约执行,CRON执行。但是如果我们中途把预约执行的job删除掉了,就需要在自己的个性线程池中判断一下是否已经被外面删除了,如果已经删除了就不用投入执行了。
因此这样的个性实现是我们有了更多的空间来发挥。对各种各样需求的系统来说具有更好的灵活性。