在业务开发过程中,我们常常需要定时任务来协助完成一些重复性的工作。例如,每天早上6点自动生成销售报表,或每晚2自动清理脏数据等。这些任务的存在极大地提升了我们的工作效率。
若您当前使用的是SpringBoot框架来开发项目,那么完成这些任务将变得异常简单。SpringBoot默认已经为我们配置了相关的定时任务组件,我们只需添加相应的注解即可实现任务调度。
在项目的pom文件中,只需引入Spring Boot Starter包。在启动类上面加上@EnableScheng注解,即可开启定时任务功能。
Spring Scheduler支持四种形式的任务调度,包括固定速率执行、固定延迟执行、初始延迟任务以及使用Cron表达式执行定时任务。
- fixedRate:以固定时间间隔执行任务,例如每5秒执行一次。
- fixedDelay:设置上一次任务调用完成与下一次任务调用开始之间的延迟时间,例如距离上一次调用成功后2秒执行。
- initialDelay:设置初始延迟后执行任务,之后可以以固定频率或间隔继续执行。
- cron:使用Cron表达式来定义定时任务的执行时间。
例如,我们可以使用fixedRate参数来设定任务的执行间隔。运行ScheduleApplication主程序后,我们可以在控制台看到任务的执行效果。
同样地,通过使用fixedDelay、initialDelay或cron参数,我们可以根据需求灵活地配置任务的执行策略。
当涉及到异步执行定时任务时,我们需要注意任务调度是在同一线程中串行执行的。通过改为异步线程执行,我们可以实现任务的并行处理,提高系统的并发性能。
虽然SpringBoot默认使用大小为1的默认线程池来执行@Scheduled任务,但我们也可以根据需要自定义线程池。通过实现SchengConfigurer类,我们可以轻松地配置自定义的线程池。
本文重点分享了Spring scheduled在业务应用中的实践。对于单体应用而言,使用SpringBoot内置的@scheduled注解可以轻松解决大部分业务需求,上手非常容易。