菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
424
0

Quartz 线程处理

原创
05/13 14:22
阅读数 92206

官网

http://www.quartz-scheduler.net/

相关的 Log 说明

http://netcommon.sourceforge.net/docs/2.1.0/reference/html/index.html

 

博客园友>> 懒惰的肥兔  (他写不少相关的文章,值得一读)

http://www.cnblogs.com/lzrabbit/archive/2012/04/15/2448326.html

 

 

有很多人问Quartz启动后,关闭服务时无法及时关闭,必须杀进程才可以,解决方法时在调用Shutdown方法时传入参数false,即不等待任务运行结束立即关闭

scheduler.Shutdown(false);

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

 

Quartz.net  2.0 版本有个地方特别需要注意; 在 App.config 里的 factoryAdapter不再是Log4Net取而代之的是Log4Net1211;

<logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1211">
        <arg key="configType" value="INLINE"/>
      </factoryAdapter>
    </logging>

 

Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。

有一个属性可以变更默认

    //串行执行的属性。
 [Quartz.DisallowConcurrentExecution]
    public class IJob : Quartz.IJob
    {
        public void Execute(Quartz.IJobExecutionContext context)
        {
}
}

 

@DisallowConcurrentExecution

此标记用在实现Job的类上面,意思是不允许并发执行,按照我之前的理解是 不允许调度框架在同一时刻调用Job类,后来经过测试发现并不是这样,而是Job(任务)的执行时间[比如需要10秒]大于任务的时间间隔 [Interval(5秒)],那么默认情况下,调度框架为了能让 任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务。否则的话会等待任务执行完毕以后 再重新执行!(这样会导致任务的执行不是按照我们预先定义的时间间隔执行)

设定的时间间隔为3秒,但job执行时间是5秒,设置@DisallowConcurrentExecution以后程序会等任务执行完毕以后再去执行,否则会在3秒时再启用新的线程执行

发表评论

0/200
424 点赞
0 评论
收藏