springtask基本使用

ops/2025/2/11 22:32:39/

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/ops/157628.html

相关文章

2526考研资料分享 百度网盘

通过网盘分享的文件&#xff1a;01、2026【考研数学】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492mP3w?pwd98wg 提取码:98wg--来自百度网盘超级会员v3的分享 通过网盘分享的文件&#xff1a;01、2026【考研政治】 链接:https://pan.baidu.com/s/1PwMzp_yCYqjBqa7492…

ASP.NET Core 外部向SignalR的Hub发消息

实现 Hub类中的方法只应该用于消息的发布&#xff0c;而不应该用来写业务逻辑&#xff0c;SignalR中客户端给服务器端传递消息的超时时间为30s&#xff0c;如果对Hub类中的方法的调用执行时间超过30s&#xff0c;程序就会报错。可以在MVC控制器、托管服务等外部向客户端推送消…

Mac(m1)本地部署deepseek-R1模型

1. 下载安装ollama 直接下载软件&#xff0c;下载完成之后&#xff0c;安装即可&#xff0c;安装完成之后&#xff0c;命令行中可出现ollama命令 2. 在ollama官网查看需要下载的模型下载命令 1. 在官网查看deepseek对应的模型 2. 选择使用电脑配置的模型 3. copy 对应模型的安…

力扣 单词拆分

动态规划&#xff0c;字符串截取&#xff0c;可重复用&#xff0c;集合类。 题目 单词可以重复使用&#xff0c;一个单词可用多次&#xff0c;应该是比较灵活的组合形式了&#xff0c;可以想到用dp&#xff0c;遍历完单词后的状态的返回值。而这里的wordDict给出的是list&…

黑马React保姆级(PPT+笔记)

目录 一、react基础 1.进程 2、优势 3、市场 4、搭建脚手架 认识目录 核心依赖&#xff08;右边两个react&#xff09; 去除非必要 运行原理&#xff1a; 总结 5、JSX 本质 高频场景 注意​编辑 渲染列表 总结 条件渲染 简单情况 复杂情况 事件绑定&#x…

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”_deepseek ddos

当算力博弈升级为网络战争&#xff1a;拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下&#xff0c;网络已然成为人类社会运转的关键基础设施&#xff0c;深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…

KITE提示词框架:引导大语言模型的高效新工具

大语言模型的应用日益广泛。然而&#xff0c;如何确保这些模型生成的内容在AI原生应用中符合预期&#xff0c;仍是一个需要不断探索的问题。以下内容来自于《AI 原生应用开发&#xff1a;提示工程原理与实战》一书&#xff08;京东图书&#xff1a;https://item.jd.com/1013604…

龙迅LT8711UXD 高性能2PORT TYPE-CDPEDP转HDMi 2.0加PD 3.0,内置MCU

龙迅LT8711UXD描述&#xff1a; LT8711UXD是一款高性能的双车道TypeC/DP1.4到HDMI2.0转换器&#xff0c;设计用于将USB Type-C源或DP1.4源连接到HDMI2.0接收器。LT8711UXD集成了一个DP1.4兼容的接收机&#xff0c;和一个HDMI2.0兼容的发射机。此外&#xff0c;还包括两个CC控制…