springtask基本使用

embedded/2025/2/11 15:16:45/

Spring Task 介绍与基本使用


1. 什么是 Spring Task?

Spring Task 是 Spring 框架提供的 轻量级任务调度模块,用于在应用程序中实现定时任务、周期性任务或延迟任务。它通过注解和配置简化了任务调度的开发,适用于单机环境下的简单调度需求。


2. 核心组件
  • @Scheduled 注解:标记需要定时执行的方法。

  • TaskScheduler:任务调度器,负责根据规则触发任务。

  • Cron 表达式:定义复杂的时间调度规则(如每天凌晨执行)。

  • TaskExecutor:任务执行器,控制任务执行的线程池。


3. 快速入门(Spring Boot 示例)
3.1 启用任务调度

在 Spring Boot 启动类添加 @EnableScheduling 注解:

@SpringBootApplication
@EnableScheduling  // 启用任务调度
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}
3.2 定义定时任务

在 Bean 中使用 @Scheduled 注解标记方法:

@Component
public class MyTask {// 每隔 5 秒执行一次@Scheduled(fixedRate = 5000)public void task1() {System.out.println("Fixed Rate Task: " + new Date());}// 每天 12:00 执行@Scheduled(cron = "0 0 12 * * ?")public void task2() {System.out.println("Cron Task: Lunch Time!");}
}

4. @Scheduled 参数详解
  • fixedRate:固定速率,上次任务开始后间隔指定时间执行。

    @Scheduled(fixedRate = 5000)  // 单位:毫秒
  • fixedDelay:固定延迟,上次任务结束后间隔指定时间执行。

    @Scheduled(fixedDelay = 3000)
  • initialDelay:首次任务延迟时间。

    @Scheduled(initialDelay = 1000, fixedRate = 5000)
  • cron:使用 Cron 表达式定义复杂规则。

    @Scheduled(cron = "0 0/30 9-17 * * MON-FRI")  // 工作日每半小时执行

5. Cron 表达式语法

Cron 表达式由 6~7 个字段 组成,格式为:
秒 分 时 日 月 周 [年](年可选)

字段允许值特殊字符
0-59, - * /
0-59, - * /
0-23, - * /
1-31, - * ? / L W
1-12 或 JAN-DEC, - * /
1-7 或 SUN-SAT, - * ? / L #
1970-2099, - * /

示例

  • 0 0 12 * * ?:每天 12:00 执行。

  • 0 0/5 14,18 * * ?:每天 14 点和 18 点,每隔 5 分钟执行。

  • 0 15 10 ? * MON-FRI:工作日 10:15 执行。


6. 配置线程池

默认情况下,所有任务在 单线程 中执行。若需并发执行,需自定义线程池:

@Configuration
public class TaskConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));}
}

7. 常见问题与解决
  • 问题1:任务阻塞导致后续任务延迟
    解决:使用 @Async 异步执行,或增大线程池大小。

    @Async
    @Scheduled(fixedRate = 1000)
    public void asyncTask() {// 异步任务逻辑
    }
  • 问题2:任务需手动启停
    解决:通过 ScheduledFuture 控制任务。

    @Autowired
    private TaskScheduler taskScheduler;private ScheduledFuture<?> future;public void startTask() {future = taskScheduler.schedule(() -> System.out.println("Dynamic Task"), new CronTrigger("0/5 * * * * ?"));
    }public void stopTask() {if (future != null) future.cancel(true);
    }

8. Spring Task vs Quartz
特性Spring TaskQuartz
复杂度轻量级,配置简单功能丰富,配置复杂
分布式支持不支持(单机)支持(需数据库)
任务持久化不支持支持
适用场景简单定时任务、单机环境复杂调度、分布式集群环境

9. 最佳实践
  1. 避免长时间阻塞任务:确保任务快速执行,或使用异步线程。

  2. 合理配置线程池:根据任务数量调整线程池大小。

  3. 使用 Cron 表达式:灵活控制复杂调度逻辑。

  4. 日志与监控:记录任务执行状态,便于排查问题。


http://www.ppmy.cn/embedded/161355.html

相关文章

远程 IO 模块:汽车零部件产线的高效生产引擎

在汽车零部件生产的激烈竞争中&#xff0c;效率与质量是企业立足的根本。传统生产模式在面对日益增长的市场需求时&#xff0c;逐渐显露出短板。而明达技术MR20远程 IO 模块的出现&#xff0c;如同一束强光&#xff0c;照亮了汽车零部件生产高效发展的新道路。 MR20远程 IO 模块…

【Kubernetes的SpringCloud最佳实践】有Service是否还需要Eureka?

在 Kubernetes 中部署 Spring Cloud 微服务时&#xff0c;是否还需要 Eureka 取决于具体场景和架构设计。以下是详细的实践建议和结论&#xff1a; 1. Kubernetes 原生服务发现 vs Eureka Kubernetes 自身提供了完善的服务发现机制&#xff08;通过 Service 资源&#xff09;&…

【cocos creator】拖拽排序列表

DEMO下载 GameCtrl.ts import ItemCtrl from "./ItemCtrl";const { ccclass, property } cc._decorator;ccclass export default class GameCtrl extends cc.Component {property(cc.Node)content: cc.Node null;property(cc.Node)prefab: cc.Node null;arr []…

Linux 安装 Ollama

1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…

高效利用Python爬虫获取淘宝店铺详情:电商数据挖掘

在电商行业竞争日益激烈的当下&#xff0c;精准且高效地获取淘宝店铺详情对于商家和数据分析师来说至关重要。无论是进行市场调研、优化商品布局&#xff0c;还是制定竞争策略&#xff0c;店铺详情数据的全面掌握都是关键。Python爬虫技术以其强大的功能和灵活性&#xff0c;成…

DeepSeek之于心理学的一点思考

模型和硬件参数对应关系参考 模型参数规模 典型用途 CPU建议 GPU建议 最小内存建议 磁盘空间建议 适用场景 1.5b(15亿) 小型推理、轻量级任务 4核以上(Intel i5/AMD Ryzen5) 可选&#xff0c;入门级GPU(如NVIDIA GTX1650 4GB显存) 8GB 10GB以上SSD 小型NLP任务、文…

Python Pandas(7):Pandas 数据清洗

数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况&#xff0c;如果要使数据分析更加准确&#xff0c;就需要对这些没有用的数据进行处理。数据清洗与预处理的常见步骤&#xff1a; 缺失值处理&#xff1a;识别并…

AF3 ExponentialMovingAverage类解读

AlphaFold3 的 ExponentialMovingAverage (EMA) 类,用于维护神经网络模型参数的指数加权移动平均。它可以在训练过程中对模型的参数进行平滑处理,以减缓参数更新的波动,帮助提升模型的泛化能力。 主要功能 EMA 通过对每个参数的移动平均来稳定模型的训练过程。在每一步,参…