什么是计划任务?对于计算机运维人员来说,很多命令都是要重复执行的,这些重复执行的指令流程我们可以编写shell脚本统一执行,然而很多时候脚本要定时执行,比如每天某个时间执行一次数据库备份或者git统一push最新的代码。
Spring Task 的原理是在初始化 bean 时借助 ScheduledAnnotationBeanPostProcessor 拦截@Scheduled 注解所标识的方法,并根据每个方法及其注解配置构建相应的 Task 实例注册到 ScheduledTaskRegistrar 中,并在单例 bean 初始化完成后通过 afterSingletonsInstantiated 回调设置 ScheduledTaskRegistrar 中的调度器 TaskScheduler,其底层依赖于 jdk 并发包中的 ScheduledThreadPoolExecutor 实现,并在 afterPropertiesSet 时将所有 Task 添加到 TaskScheduler 中调度执行。