Cron4j定时任务扎堆执行

Cron4j的定时任务,比如十个任务每10分钟执行一次,10个任务每20分钟执行一次。

根据cron4j的规则,那么在20分,40分,还有60分的时候,这二十个任务是一起执行的,这样不是同时占用服务器资源吗?

如果这个时候这二十个任务里面还有大量的数据库操作等,服务器不会翻车吗?


如果我10任务启动时间XX:13分下一个执行时间是XX:23分,XX:33分以此类推,

另外10个任务启动时间XX:15分下一个执行时间是XX:35分,XX:55分,这样不就错峰执行了吗?


Cron4j支持持久化吗?还是要换成Quartz。 


评论区

zzutligang

2021-06-16 22:24

不知所云

HingLo

2021-06-17 09:01

cron 表达式尽量不要挨到一起,频率相同的,开始时间可以从秒级别上调整。比如有的从1秒开始,有的从2秒开始,依次内推,这样就很大程度错开了并发问题

hb963724769

2021-06-17 16:43

@HingLo cron表达式不支持到秒级任务,最低是分

hb963724769

2021-06-17 16:43

@zzutligang 你用过cron吗

l745230

2021-06-18 11:57

jfinal自带的cron没用过. jfinal-ext3中集成的Quartz 默认配置是10个线程池. 按你这种使用方式,在20分的时候只会同时有10个任务再执行,执行完一下再执行下一个.

杜福忠

2021-06-18 14:27

任务如果不需要强指定同一执行时间,并且担心数据库性能问题。
那么可以把这些操作放在一个Cron4j任务去调用,单线程去try顺序执行即可。
至于持久化这个概念是Quartz的吧,Cron4j因为入口是Runnable接口的java类,应该是都可以自己操作的吧

hb963724769

2021-06-21 10:23

@杜福忠 我做了一个界面来统一管理所有的定时任务,因为jfinal只支持plugin级别的start跟stop,所以我有几个定时任务,就会有几个cron4jPlugin。

HingLo

2021-06-21 11:37

@hb963724769 那你用quartz,自带的cron在分钟级别上调整,

杜福忠

2021-06-21 12:07

@hb963724769 那帖子上的理解没有问题,应该就是最简单的处理方案了