为了账号安全,请及时绑定邮箱和手机立即绑定

如何编写循环定期执行的任务?

如何编写循环定期执行的任务?

DIEA 2019-04-16 16:58:19
需求是设计一个系统,某一个组件需要定期对数据进行批处理计算,比如每隔2个小时执行一次计算。应该怎么实现呢?在主程序中写个循环还是设定一个crontab任务由系统间隔性执行程序?
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

推荐用crontab,感觉死循环常驻内存这种事情怎么看怎么感觉很危险…而且crontab配置简单,不用写多余的代码,专注要做的事情。
                            
查看完整回答
反对 回复 2019-04-16
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

晚上考虑了一下。其实并不是说一定要用某种方式,而是要根据实际需求出发来选择最终的方案。crontab是好,但在某些场合不一定适合;主程序中添加定时任务并不一定都是坏的,有时候还真要这么选择。
分离or耦合
个人经验,绝大部分的定时任务都可以从主应用中分离,比如说统计数据计算、过期数据清理、数据备份、日志监控等等。但是前提是定时任务与主业务逻辑关联不大。如果定时任务和主业务耦合,比如说积分计算,计算规则比较复杂,而且可能随需求变动,若从主业务代码分离,那么规则变动的时候就需要改两份代码,好一点这部分规则做了封装,那么改动之后还要记得主业务和定时流程都要重新部署。
如果不用crontab或者类crontab组件,那么也用忙等去做定时任务也是不可取的。可以使用ScheduledExecutorService管理延时任务。
同意@公子的。但是用crontab的时候需要注意执行线程能够正常退出。之前就发生过因为执行线程没有退出,资源占满。
如果任务执行依赖的组件比较多,在主业务中编写方便的话,也可以考虑使用定时器来作延时任务管理。
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 362 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号