使用定时框架Quartz.net时,发布到服务器后无法正常执行定时任务

问题描述:
使用Quartz.net每天定时执行某个任务时,未能正常执行,每次在本地测试时,设置了短的时间间隔,都能正常执行任务,但是挂到服务器后,设置定时执行时间为几个小时,却不能正常执行我们要执行的操作。

原 因:
IIS的程序池有一个闲置超时时间,默认这个时间为20分钟,即网页20分钟内没操作,IIS就会自动释放该资源,这也是无法正常执行我们要执行的任务的原因。

解决方法:
打开我们的IIS,找到应用程序池,选择要执行定时任务的程序池,点击高级设置,找到闲置超时(分钟)选项,并将20设置为0即可,如下图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果因为网络波动导致定时任务没有执行,你可以考虑使用Quartz提供的Misfire机制来解决这个问题。Misfire是指当一个Trigger错过了它应该被触发的Quartz会尝试将它执行,而不是直接跳过。 Quartz提供了几种Misfire处理策略,你可以根据实际情况选择合适的策略。常见的Misfire处理策略有: 1. MISFIRE_INSTRUCTION_FIRE_NOW:立即触发任务,不考虑错过的间段。 2. MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT:重新安排任务,保留原来的执行次数和间隔间。 3. MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT:重新安排任务,但是执行次数会减少,间隔间不变。 4. MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT:重新安排任务,保留原来的执行次数,但是间隔间会变成当前间。 5. MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT:重新安排任务,但是执行次数会减少,间隔间会变成当前间。 你可以在定义Trigger指定Misfire处理策略,例如: ``` Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startAt(startTime) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMinutes(15) .repeatForever() .withMisfireHandlingInstructionNowWithExistingCount()) .build(); ``` 在这个例子中,使用了MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT策略,如果任务错过了执行间,会立即重新安排任务,保留原来的执行次数,但是间隔间会变成当前间。 另外,你还可以考虑使用Quartz的监控功能来检测定时任务是否正常运行。例如,可以通过Quartz提供的JMX接口,监控Scheduler的状态和Trigger的执行情况,及发现问题并进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值