Spring框架中@Scheduled注解的使用示例

简介: 以上步骤和例子提供了Spring框架中 `@Scheduled`使用的具体方法,允许开发者灵活地进行任务调度。通过结合不同的属性,可以精确控制方法的调度策略,以满足不同场景下的需要。

在Spring框架中,@Scheduled注解是用于标记在固定时间执行的方法。这一特性常用于执行定时任务,比如数据库的定期清理、读取和汇总数据等。要在Spring应用程序中使用 @Scheduled注解,首先需要确保已经在配置文件中启用了任务调度。这通常通过在一个配置类上添加 @EnableScheduling注解来完成。

下面是使用 @Scheduled注解的步骤与示例:

1. 启用调度配置

在配置类上使用 @EnableScheduling注解来激活调度功能:

@Configuration
@EnableScheduling
public class SchedulerConfig {
    // 其他Bean定义
}
​

2. 创建任务方法

创建一个带有 @Scheduled的方法。此方法应是无参数的,而且返回类型应该是 void

@Component
public class ScheduledTasks {

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        System.out.println("当前时间:" + LocalDateTime.now());
    }
}
​

@Scheduled注解中,有几个参数可以用来定制任务的执行方式:

  • fixedRate:定义方法执行的间隔时间,上面的示例表示每5秒执行一次。
  • fixedDelay:在方法执行完毕后等待一定时间再次执行。
  • initialDelay:在第一次执行方法之前等待的时间。
  • cron:使用cron表达式来定义执行规则,比如 "0 * * * * ?"表示每分钟的0秒执行任务。

    3. 示例:使用Cron表达式

下面是一个使用cron表达式的例子,假设我们想在每天下午2点执行一个任务:

@Component
public class DailyTask {

    @Scheduled(cron = "0 0 14 * * ?")
    public void performDailyJob() {
        System.out.println("执行日常任务:" + LocalDateTime.now());
    }
}
​

cron表达式由6或7个空格分隔的时间字段组成,表示执行任务的时刻或者周期:

  • 秒 (0 - 59)
  • 分 (0 - 59)
  • 时 (0 - 23)
  • 日 (1 - 31)
  • 月 (1 - 12 或 JAN - DEC)
  • 星期几 (0 - 7 或 SUN - SAT,其中0或7表示星期天)
  • 年(可选,留空则为每年)

4. 使用fixedDelay和initialDelay组合

如果需要在任务执行完成后等待一段时间后再次执行,并且需要延迟第一次执行,可以组合使用 fixedDelayinitialDelay属性:

@Component
public class DelayedTask {

    @Scheduled(fixedDelay = 10000, initialDelay = 5000)
    public void executeWithDelay() {
        System.out.println("执行有延迟的任务:" + LocalDateTime.now());
        // 模拟任务执行时间
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
​

以上示例展示了怎样设置一个初始延迟,在程序启动后5秒执行第一次,之后任务完成后每隔10秒再执行一次,即使任务的执行时间为3秒。

以上步骤和例子提供了Spring框架中 @Scheduled使用的具体方法,允许开发者灵活地进行任务调度。通过结合不同的属性,可以精确控制方法的调度策略,以满足不同场景下的需要。

目录
相关文章
|
21天前
|
存储 JSON 关系型数据库
如何在MySQL中查询存储为JSON格式的数据
以上就是在MySQL中查询JSON格式数据的一些方法。在实际使用中,针对不同的查询需求,要选择合适的JSON路径表达式和函数进行数据查询。随着实际情况的复杂性增加,可能会需要更复杂的路径表达式和JSON处理函数的组合来实现目标。尽管介绍的内容较为综合,但目的是为了给出一个可操作的视野,来处理存储在MySQL中的JSON数据。在对这些方法有了一定了解之后,可以更进一步地深入学习和探索更多高级的用法。
99 8
|
21天前
|
消息中间件 缓存 前端开发
WebSocket 与 MQTT 在即时通讯中的深度对比与架构选型指南
WebSocket 是双向通信通道,适合前端实时交互;MQTT 是轻量级消息协议,支持发布/订阅与可靠传输。二者互补,常结合使用:前端通过 WebSocket 接入,后端以 MQTT 实现高并发消息分发,构建可扩展的现代即时通讯系统。
304 17
|
5天前
|
弹性计算 搜索推荐 应用服务中间件
阿里云服务器优惠价格表:38元1年、99元和199元收费,一个月89元和160元配置清单
阿里云爆款服务器特惠:轻量应用服务器38元/年起,ECS云服务器2核2G仅99元/年,2核4G 199元/年;4核16G 89元/月,8核32G 160元/月。香港轻量服务器25元/月起,200M带宽不限流量。GPU服务器A10/T4/V100等型号享月度优惠。更多配置及按小时计费详情,见阿里云官方活动页。
阿里云服务器优惠价格表:38元1年、99元和199元收费,一个月89元和160元配置清单
|
20天前
|
JSON 数据可视化 Java
Spring Boot中使用Swagger3.0.0版本构建RESTful APIs
Spring Boot中使用Swagger3.0.0版本构建RESTful APIs
207 6
|
12天前
|
Java Nacos Sentinel
SpringCloud 微服务解决方案:企业级架构实战
全面介绍 SpringCloud 微服务解决方案,涵盖服务注册发现、网关路由、熔断限流、分布式事务等企业级实践
|
22天前
|
存储 JSON 运维
微服务架构下的日志“捕手”:构建高效的日志收集与分析体系
微服务架构下的日志“捕手”:构建高效的日志收集与分析体系
88 8
|
21天前
|
机器学习/深度学习 JavaScript Java
基于图像识别的蘑菇种类识别系统
本系统基于深度学习与图像识别技术,构建蘑菇智能分类平台,融合Spring Boot、Vue.js与MySQL技术栈,实现高效、精准的蘑菇种类识别,助力公众安全、生态保护与食用菌产业发展。
|
23天前
|
数据采集 机器学习/深度学习 数据可视化
基于python大数据的小说数据可视化及预测系统
本研究基于Python构建小说数据可视化与预测系统,整合多平台海量数据,利用爬虫、数据分析及机器学习技术,实现热度趋势预测与用户偏好挖掘。系统结合Django、Vue等框架,提供动态交互式可视化界面,助力平台精准运营、作者创作优化与读者个性化阅读体验,推动网络文学数据智能化发展。
|
25天前
|
机器学习/深度学习 搜索推荐 JavaScript
基于深度学习的健康饮食推荐系统
本研究聚焦基于深度学习的健康饮食推荐系统,针对慢性病高发与饮食不健康问题,结合Spring Boot、Vue.js、MySQL等技术,构建个性化、智能化的饮食管理平台,提升用户健康管理效率。
|
26天前
|
架构师 微服务
【架构师】微服务的拆分有哪些原则?
微服务拆分需遵循七大原则:职责单一、围绕业务、中台化公共模块、按系统保障级别分离、技术栈解耦、避免循环依赖,并遵循康威定律使架构与组织匹配,提升可维护性与协作效率。
121 4