五分钟搞定,实现定时任务的五种方案!

网站建设5年前发布
55 0 0

我们在实际开发中,多多少少都会用到定时任务来处理一些问题。,比如金融项目中的对账,每天定时对昨天的账务进行核对,每个月初对上个月的账务进行核对等。,还比如,我们需要处理一些老数据迁移,修复一些新项目和老项目数据不兼容的问题等等。,这个目前在项目中用得较少,直接贴demo代码。,具体的介绍可以查看api ,但是在某些框架中是有用到。,执行结果:,这么使用,阿里代码检查插件会提示:,2023030615342516b1db83663f016f6d0960f84dfe4d3554a908992,从提示中可以看出,在多线程并行处理定时任务时,Timer运行多个TimerTask时,只要有其中之一没有捕获抛出的异常,其他任务会自动终止运行。,和Timer类型,也就是阿里代码检查插件推荐的方案:,运行结果:,阿里代码检查插件也会提示:,2023030615372511eba9987e004c6175d46281184791b55b59a0618,这里提示的是我们创建线程池的方式,建议我们使用手动创建线程池,不要使用​​Executors​​工厂类,因为手动创建更能有效规划资源的使用。,用起来也非常简单:,运行结果:,基于注解设定多线程定时任务 :,运行结果:,我们需要引入依赖:,实现类:,配置类:,只要启动Spring Boot项目,就会输出:,我们在项目,可能会涉及动态调整定时任务执行core表达式、动态关闭开启定时任务,我们可以使用​​SchedulingConfigurer​​来实现(使用数据库结合来搞):,比如:,如果项目中用得到类似的,可以网上搜搜SchedulingConfigurer便可实现。,进而再扩展,那就来到分布式任务调度了。,任务调度是指基于给定的时间点,给定的时间间隔或者给定执行次数自动得执行任务。任务调度是是操作系统的重要组成部分,而对于实时的操作系统,任务调度直接影响着操作系统的实时性能。任务调度涉及到多线程并发、运行时间规则定制及解析、线程池的维护等诸多方面的工作。,WEB服务器在接受请求时,会创建一个新的线程服务。但是资源有限,必须对资源进行控制,首先就是限制服务线程的最大数目,其次考虑以线程池共享服务的线程资源,降低频繁创建、销毁线程的消耗;然后任务调度信息的存储包括运行次数、调度规则以及运行数据等。一个合适的任务调度框架对于项目的整体性能来说显得尤为重要。,分布式任务调度框架有:cronsun、Elastic-job、saturn、lts、TBSchedule、xxl-job 等。,另外,就是cron表达式,推荐 http://www.pppet.net/,20230306153426c1f970b861abf0f2ed24732c84fdf0b50e1821567,可以根据自己业务情况来,手动选择,自动生成表达式。

© 版权声明

相关文章