《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​

《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​

🌟 ​大家好,我是摘星!​ 🌟

今天为大家带来的是@Scheduled和Quartz对比分析:

新手常见困惑:
刚学SpringBoot时,我发现用@Scheduled写定时任务特别简单。但当我看到同事在项目里用Quartz时,代码突然变得复杂起来——为什么要用这些复杂的配置?难道注解不香吗?

今天,我们就用最直白的方式,手把手对比这两种方案。

目录

1. 定位与设计目标

1.1. @Scheduled注解

1.2. 定时任务框架(如Quartz、XXL-JOB)

2. 特性对比

3. @Scheduled

3.1. 基础用法

3.2. 致命缺陷

4. Quartz :复杂且强大

5. 本质区别

6. Q&A

6.1. 我该什么时候切换用Quartz?

6.2. Quartz配置好麻烦,有简化方案吗?

6.3. 听说还有XXL-JOB,我需要学吗?

7. 避坑指南:新手常犯的3个错误

7.1. Cron表达式写错格式

7.2. 忘记线程池配置

7.3. 在集群环境混用两种方案

8. 总结


 

1. 定位与设计目标

1.1. @Scheduled注解

  • 轻量级单机调度:Spring框架原生支持的简单定时任务工具,无需引入额外依赖。
  • 场景适用:适用于单应用实例、无需复杂调度逻辑的定时任务(如数据清理、缓存刷新)。
  • 设计核心:基于内存的任务调度,依赖Spring容器生命周期管理。

1.2. 定时任务框架(如Quartz、XXL-JOB)

  • 企业级调度平台:面向分布式、高可用、复杂调度需求的场景(如任务分片、失败重试、依赖管理)。
  • 核心能力:支持任务持久化、集群部署、动态配置、监控报警等生产级功能。
  • 扩展性:提供插件机制、任务管理界面(如XXL-JOB的Admin控制台)。

2. 特性对比

特性

@Scheduled

定时任务框架(以Quartz为例)

任务持久化

❌ 任务信息仅存于内存

✅ 支持数据库持久化,任务可恢复

分布式调度

❌ 单机运行,多实例会重复执行

✅ 集群环境下任务互斥,避免重复执行

动态调整任务

❌ 需重启应用修改配置

✅ 支持运行时动态修改触发规则

失败重试机制

❌ 默认无重试

✅ 支持自定义重试策略和次数

任务分片

❌ 不支持

✅ 支持任务分片执行(如Elastic Job)

任务依赖管理

❌ 不支持

✅ 支持任务链式或DAG依赖调度

监控与管理界面

❌ 无

✅ 提供Web控制台(如XXL-JOB)

Cron表达式灵活性

✅ 支持标准Cron

✅ 支持扩展Cron(如Quartz的秒级精度)

任务执行线程池

✅ 可自定义TaskScheduler

✅ 提供线程池配置和任务队列管理


 

3. @Scheduled

3.1. 基础用法

场景:每天凌晨3点清理临时文件

步骤:

  1. 在SpringBoot启动类加@EnableScheduling
@SpringBootApplication @EnableScheduling // 关键!开启定时任务支持 public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } }
  1. 在Bean中写任务方法
@Component public class CleanTempFileJob { // 最简单的固定间隔执行 @Scheduled(fixedRate = 5000) // 每5秒执行一次 public void cleanCache() { System.out.println("正在清理临时文件..." + new Date()); } // Cron表达式控制复杂时间 @Scheduled(cron = "0 0 3 * * ?") // 每天3点执行 public void dailyClean() { // 业务逻辑... } }

优点
✅ 开发快,5行代码就能跑起来
✅ 无需引入额外依赖
✅ 适合快速验证想法

3.2. 致命缺陷

场景升级
当项目部署到两台服务器时,你突然发现——明明只该执行一次的任务,两个节点同时跑起来了!这就是单机方案的致命缺陷。

问题总结

场景

现象

根本原因

多实例部署

重复执行

无集群协调机制

任务执行时间过长

其他定时任务被延迟

默认单线程执行

服务器重启

未完成的任务不会自动恢复

无持久化机制

举个真实案例:

// 统计每日订单量的任务 @Scheduled(cron = "0 0 1 * * ?") public void countDailyOrders() { // 执行时间长达10分钟 heavyDatabaseOperation(); }

当这个任务运行时,其他所有@Scheduled任务都会被阻塞,直到它完成!

4. Quartz :复杂且强大

解决思路
引入专业框架,实现:

  1. 任务持久化(重启不丢失)
  2. 线程池隔离(任务互不影响)
  3. 集群协调(多节点不重复)

实现步骤

  1. 添加依赖
<!-- pom.xml --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
  1. 配置数据库(这里用H2演示)
# application.properties spring.quartz.job-store-type=jdbc spring.datasource.url=jdbc:h2:mem:testdb spring.quartz.properties.org.quartz.jobStore.isClustered=true
  1. 定义任务逻辑
public class OrderStatJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) { // 从context获取参数 System.out.println("执行订单统计:" + new Date()); } }
  1. 配置触发器
@Configuration public class QuartzConfig { @Bean public JobDetail orderStatJobDetail() { return JobBuilder.newJob(OrderStatJob.class) .withIdentity("orderStatJob") // 任务唯一标识 .storeDurably() .build(); } @Bean public Trigger orderStatTrigger() { return TriggerBuilder.newTrigger() .forJob(orderStatJobDetail()) .withIdentity("orderStatTrigger") .withSchedule(CronScheduleBuilder.cronSchedule("0 0 2 * * ?")) // 每天2点 .build(); } }

关键改进
✅ 任务信息存数据库,重启后自动恢复
✅ 默认线程池大小10,任务并行执行
✅ 集群部署时通过数据库锁避免重复执行


5. 本质区别

对比维度

@Scheduled

Quartz

学习成本

5分钟入门

需要理解Job/Trigger等概念

多节点执行

所有节点同时执行

同一任务集群中只执行一次

任务中断恢复

不支持

支持自动恢复未完成任务

任务执行时间

单线程,长任务会阻塞其他任务

线程池隔离,任务互相独立

动态调整

需重启应用

可通过API动态修改调度策略

适用场景

单机简单任务

分布式环境、需要可靠性的任务

6. Q&A

6.1. 我该什么时候切换用Quartz?

当遇到以下情况时:

  • 需要部署多个服务实例
  • 任务执行超过30秒可能影响其他任务
  • 老板要求不能因为服务器重启丢任务

6.2. Quartz配置好麻烦,有简化方案吗?

试试用@PersistJobDataAfterExecution注解:

@PersistJobDataAfterExecution // 自动持久化任务数据 @DisallowConcurrentExecution // 禁止并发执行 public class SafeJob extends QuartzJobBean { // ... }

6.3. 听说还有XXL-JOB,我需要学吗?

如果你的项目已经分布式部署,且需要:

  • 可视化的任务管理界面
  • 自动分片处理大数据量任务
  • 实时日志查看
    那么XXL-JOB更适合,但学习曲线更高。

7. 避坑指南:新手常犯的3个错误

7.1. Cron表达式写错格式

Spring的@Scheduled和Quartz的Cron略有不同:

    • Spring:秒 分 时 日 月 周几
    • Quartz:支持秒级精度和更多特殊字符

7.2. 忘记线程池配置

在@Scheduled中记得自定义线程池:

@Bean public TaskScheduler taskScheduler() { return new ThreadPoolTaskScheduler(); }

7.3. 在集群环境混用两种方案

千万不要同时用@Scheduled和Quartz做同一个任务!


8. 总结

记住这个选择口诀:

单机简单用注解,
多节点上Quartz。
若是任务要可靠,
持久化配置不能少。

 

Read more

保姆级教程:Windows本地部署Ollama+OpenClaw,打造你的AI赚钱系统(APP开发/量化/小说/剪辑)

摘要:想用AI搞钱但卡在技术门槛?本文手把手教你用一台Windows电脑,零成本本地部署Ollama大模型+OpenClaw智能中枢,赋予AI开发APP、量化分析、编写小说、剪辑辅助等“赚钱技能”。全程无需编程基础,跟着鼠标点、照着命令敲,即可拥有24小时待命的AI员工。 一、写在前面 很多朋友对AI变现跃跃欲试,却常被这些问题劝退: * 云端部署太贵,API调用怕浪费钱 * 技术文档看不懂,不知道从哪下手 * 数据隐私担忧,不敢把敏感资料上传 其实,你手头那台Windows电脑完全能胜任!本文将带你搭建一套完全本地化、免费、可扩展的AI生产力系统,让AI帮你写代码、分析表格、生成文案、处理视频,真正把AI变成你的“赚钱工具”。 系统架构: * 本地大脑:Ollama + DeepSeek模型,负责理解任务、生成内容 * 智能中枢:OpenClaw(原名OpenClaude),负责调用各类工具(Skill) * 赚钱技能:通过安装Skill包,让AI具备特定领域的实操能力 适用人群:

By Ne0inhk

在CodeBuddy中使用自定义AI接口,轻松对接GPT5-Code等大模型,实现AI编程自由!

使用过CodeBuddy的朋友都知道,新用户赠送的大模型使用额度太少了,跑一天就没了,根本就支撑不住我们的Vibe Coding! 比如痴狂哥最近做的项目,没到半天额度就满了:不写一行代码!我用 AI 打造了一款 AI 客户端!(开源) 所以,今天痴狂哥就给大家公布一个自用的方法,让CodeBuddy编辑器能够使用我们自定义的AI接口和大模型,能够无限地愉快自动化编程!实现真正的AI编程自由! 实现效果 1. 让CodeBuddy使用自定义大模型接口,轻松对接如GPT5-Codex等大模型 2. 不消耗用户的使用量,无限免费Vibe Coding! 好了,我们开始吧! 准备工作 1. CodeBuddy海外版(截至至文章发布日期的最新版本0.2.4) 2. Python3(脚本环境) 3. Reqable(抓包工具) 以上软件自行前往官网下载安装。 第一步:重定向大模型接口 将CodeBuddy请求大模型的接口地址,重定向到我们自己的任意大模型API! 安装完毕之后,我们首先打开Reqable,初始化配置,装好证书后启动代理

By Ne0inhk
openJiuwen集成蓝耘AI模型深度解析:从架构设计到企业级Agent实战部署

openJiuwen集成蓝耘AI模型深度解析:从架构设计到企业级Agent实战部署

前言 在人工智能技术从单纯的感知智能向认知智能演进的浪潮中,大语言模型(LLM)的成熟催生了AI Agent(人工智能体)这一全新的应用形态。AI Agent不再局限于传统的单指令执行,而是演进为具备自主感知、推理规划、决策执行能力的智能实体。在这一技术变革背景下,openJiuwen作为一个致力于提供灵活、强大且易用能力的开源Agent平台应运而生。本文将深度剖析openJiuwen的技术架构、核心优势,并基于真实的服务器部署环境,详细拆解从底层环境搭建到上层复杂智能体构建的全过程。 一、 Agentic AI时代的基础设施:openJiuwen概览 openJiuwen的定位不仅是一个开发工具,而是面向生产级应用的Agent全生命周期管理平台。它旨在解决当前大模型应用落地过程中面临的开发门槛高、协同调度难、运行稳定性差等痛点。通过提供标准化的开发框架与高可靠的运行引擎,openJiuwen支持开发者快速构建能够处理各类简单或复杂任务的AI Agent,并实现多Agent间的协同交互。 作为核心代码资产的入口,开发者能在这里查看项目的 Readme 文档、分支管理和最新提交

By Ne0inhk
免费开源AI工具:CoPaw与OpenFang整理

免费开源AI工具:CoPaw与OpenFang整理

CoPaw 和 OpenFang,两者软件本体都免费开源,但模型 API 可能产生费用。 CoPaw(阿里云) * 软件本身:完全免费开源(Apache 2.0),无会员、无广告、无功能限制 * 本地部署:免费,仅需 Python 环境,可跑本地模型(Ollama 等),零 API 费用 * 云端部署:魔搭创空间有免费测试额度;长期使用按云资源(CPU/GPU/ 存储)计费 * 模型 API:调用通义千问、OpenAI、DeepSeek 等按官方标准按量付费  CoPaw GitHub 地址 https://github.com/agentscope-ai/CoPaw OpenFang(

By Ne0inhk