SpringBoot 定时任务 @Scheduled
前言
有时候,我们有这样的需求,需要在每天的某个固定时间或者每隔一段时间让应用去执行某一个任务。一般情况下,可以使用多线程来实现这个功能;在 Spring 框架下可以搭配 Quartz 来实现,附上笔记 Spring Quartz 实现多任务定时调用。在 SpringBoot 框架下,我们可以用 Spring scheduling 来实现定时任务功能。
首先,我们先创建一个 Spring Boot 项目。创建方法:
* (自动完成初始化)http://blog.csdn.net/u011244202/article/details/54767036
* (手动完成初始化)http://blog.csdn.net/u011244202/article/details/54604421
同时要注意,SpringBoot 项目需要 JDK8 的编译环境!
然后,在项目主类中加入@EnableScheduling
注解,启用定时任务的配置
1 2 3 4 5 6 7 8 9 | @SpringBootApplication @EnableScheduling public class Application extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(Application. class , args); } } |
最后,创建定时任务实现类,注意加上注解@Scheduled
@Scheduled 的介绍
1. cron 表达式与 zone
zone:表示将解析cron表达式的时区。
关于 cron 表达式,可以参考一下 http://blog.csdn.net/u011244202/article/details/54382466 里面的附录。
2. fixedRate 的解释
调用固定周期(以毫秒为单位)执行方法。就是上一次开始执行时间点之后延迟执行。
3. fixedDelay 的解释
上次调用结束和下一次调用结束之间的固定周期(以毫秒为单位)执行方法。就是上一次执行完毕时间点之后延迟执行。
4. initialDelay 的解释
在第一次执行fixedRate()或fixedDelay()任务之前延迟(以毫秒为单位)。
实例
在项目启动 8s 后,每隔 5s 调用定时任务。
1 2 3 4 5 6 7 8 9 10 11 | @Component public class ScheduledTasks { //输出时间格式 private static final SimpleDateFormat format = new SimpleDateFormat( "HH(hh):mm:ss S" ); @Scheduled (initialDelay = 5000 , fixedRate = 5000 ) public void firstScheduledTasks(){ System.out.println( "定时任务执行,现在时间是 : " +format.format( new Date())); } } |
结果图:
项目参考地址
项目参考地址 : https://github.com/FunriLy/springboot-study/tree/master/%E6%A1%88%E4%BE%8B4
注意:
cron、fixedDelay、fixedRate 三者之间不能共存!!!
会抛出一个错误:
//Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'firstScheduledTasks': Exactly one of the 'cron', 'fixedDelay(String)', or 'fixedRate(String)' attributes is required.
官方文档
实例文档 : http://spring.io/guides/gs/scheduling-tasks/
注解文档 : http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具