栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

Quartz.Net多次触发,执行了60次,Cron表达式踩坑记录和解决方案

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Quartz.Net多次触发,执行了60次,Cron表达式踩坑记录和解决方案

起因

最近做一个网站,数据较多时,刷新数据比较慢。所以使用了Redis缓存优化,再使用定时任务,每隔一个小时刷新一次。

问题

定时任务使用Quartz.Net,在调试时没有问题,但部署到服务器时,范围反而觉得更慢了。

一开始,还以为是Redis服务器的问题,还有时候访问很快,有时又很慢。

分析

后面查看缓存日志,居然连续执行了几十次,有时执行十多次,有时执行二十多次,有点奇怪。又有一段时间稳定了,执行了60次,且是连续执行。

每刷新一次数据时间较长,至少10秒,多的要1分多钟,由于数据是由很多个客户端上传的,多个客户端上传数据到服务器时,刷新数据到Redis服务器,所花的时间就比较久。

需求是每小时刷新一次,但现在是每小时刷新,但是每小时刷新几十次,不正常,导致刷新缓存时,访问网站更卡。

处理

在网上查了Quartz.Net多次触发的,发现很多人也踩坑了。后来发现原来是Cron表达式写错了,

我想要的结果是每小时的25分时执行一次,于是这样写,这样写是错的。

* 25 * * * ? *

 这样表示,每小时25分的每秒执行一次,1分钟有60秒,于是执行了60次。

正确应该是

0 25 * * * ? *

表示,每小时25分的0秒执行一次

另外,还有一个问题,每次程序启动时,都会自动执行一次,这需要设置一下触发机制

//启动时,第一次不执行
((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;

Cron表达式

  • Cron表达式有7段构成,分为秒,分钟,小时时,日,月份,星期,年
  • *(星号)是通配符,表示每秒,每分钟,每小时,每日等
  • ,(逗号)可以列举执行的时间,比如 1,2,3 * * * * ? * 表示每分钟的1秒,2秒和3秒时执行一次
  • -(横杆)表示范围,0 1-3 * * * ? * 表示每小时的1分钟到3分钟,每分钟执行一次
  • /(斜杆)表示增量,0 0/5 10 * * ? * 表示每天的10点到10点55分,每5分钟执行一次

参考

定时任务功能参考了开源项目YiShaAdmin的代码,YiShaAdmin开发文档

quartz.net 时间表达式----- Cron表达式详解 - 张龙豪 - 博客园

Quartz启动后第一次会立即执行问题解决办法 - Chr☆s - 博客园

  在线Cron表达式生成器:JSON在线编辑器-奇Q工具网

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904876.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号