Spring Task 定时任务没有定时执行,为什么呢?

本文探讨了Spring Task定时任务的执行原理,包括@Scheduled注解的使用、任务阻塞的影响、多任务执行顺序、相同表达式任务的执行以及与Linux crontab的区别。通过实验展示了任务的串行执行、并发执行的情况,并分析了@Async异步注解的工作机制。文章还提到了定时任务未生效的常见检查点,帮助开发者更好地理解和配置Spring Boot的定时任务。
摘要由CSDN通过智能技术生成

前言

 

定时任务的使用,在开发中可谓是家常便饭了,定时发送邮件、短信。避免数据库,数据表过大,定时将数据转储。通知、对账等等场景。

 

当然实现定时任务的方式也有很多,比如使用 linux下的 crontab 脚本,jdk 中自带的 Timer 类。Spring Task或是 Quartz 。

 

相信你也有过如下的疑问:

 

  • Spring Task 的 crontab 的表达式 和linux下的 crontab 有什么区别?

  • crontab 表达式记不住?

  • 定时任务阻塞会有什么影响?

  • 多个定时任务的情况下如何运行的?

  • 具有相同表达式的定时任务,他们的执行顺序如何?

  • 为什么async异步任务没有生效?

 

所以这篇文章,我们来介绍一下,在 Spring Task 中, 定时任务的执行原理及相关问题。演示环境为 Spring Boot 项目。

 

SpringBoot 定时任务的原理

 

相信绝大部分开发者都使用过 Spring Boot ,它为我们提供的 Starter 包含了定时任务的注解。所以我们来主要介绍一下 Spring Boot 实现定时任务的原理,和其相关注解的作用。

 

Spring 在 3.0版本后通过 @Scheduled 注解来完成对定时任务的支持。

 

 

在使用时,需要在Application 启动类上加上 @EnableScheduling 注解,它是从Spring 3.1后开始提供的。

 

 

由于Spring3 版本较低,使用得比较少了,我们使用高版本可能并不会考虑太多细节,大多只需要关注目标实现,所以我们在配套使用两个注解的时候,并不会出现什么问题。

 

在3.0 中 ,是通过   

<!-- 配置任务线性池 -->
    <!-- 任务执行器线程数量 -->
    <task:executor id="executor" pool-size="3" />
    <!-- 任务调度器线程数量 -->
    <task:sc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值