Spring Task之Cron表达式

🌟 Spring Task高能预警:你以为的Cron表达式可能都是错的!【附实战避坑指南】

开篇暴击:为什么你的定时任务总在凌晨3点翻车?

“明明设置了0 0 2 * * ?,为什么任务每天凌晨3点执行?” —— 来自某位头发渐稀的程序员真实呐喊
在这里插入图片描述


一、Spring Task极速入门(小白必看)

1.1 三行代码开启定时任务

@SpringBootApplication
@EnableScheduling // 魔法开关
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}@Component
public class ReportJob {// 每天9点执行(错误示例!后文揭晓原因)@Scheduled(cron = "0 0 9 * * ?")public void generateDailyReport() {// 你的报表生成逻辑}
}

二、Cron表达式深水区(90%的人都踩过这些坑)

2.1 Cron语法速查表(Spring特供版)

字段年(可选)
取值0-590-590-231-311-121-7(1=周日)1970-2099

2.2 暴击灵魂的六连问

  1. *?到底有什么区别?

    • *表示任意值,?表示不指定(仅用于日和周的互斥)
  2. 为什么0 0 0 * * 1不是周一执行?

    • Spring的周字段范围是1-7(1=周日),正确写法:0 0 0 ? * 2(周一)
  3. 如何实现每月最后一天执行?

    • 使用Spring扩展语法:0 0 0 L * ?
  4. 0/5*/5有什么区别?

    • 没区别!都是每隔5单位执行(但建议统一用0/5
  5. 如何避开周末执行?

    @Scheduled(cron = "0 0 9 * * 2-6") // 周一到周五
    
  6. 为什么我的任务总是重复执行?

    • 检查线程池配置:spring.task.scheduling.pool.size=5

三、高阶玩家专属技巧(同事看了直呼内行)

3.1 动态修改Cron表达式

@Autowired
private ThreadPoolTaskScheduler taskScheduler;// 动态调整报表生成时间为10:30
public void updateReportTime() {taskScheduler.schedule(this::generateDailyReport,new CronTrigger("0 30 10 * * ?"));
}

3.2 分布式环境下的死亡陷阱

单机定时任务在分布式环境重复执行

解决方案:

  • 加Redis分布式锁
  • 改用XXL-JOB等分布式调度框架

四、性能核弹级优化方案

4.1 线程池配置(application.yml)

spring:task:scheduling:thread-name-prefix: my-task- # 线程名前缀pool:size: 10                   # 核心线程数shutdown:await-termination: true    # 优雅关闭await-termination-period: 60s

4.2 监控任务执行时长(AOP实现)

@Aspect
@Component
public class TaskMonitorAspect {@Around("@annotation(org.springframework.scheduling.annotation.Scheduled)")public Object monitor(ProceedingJoinPoint pjp) throws Throwable {long start = System.currentTimeMillis();try {return pjp.proceed();} finally {long cost = System.currentTimeMillis() - start;log.info("任务 {} 执行耗时: {}ms", pjp.getSignature(), cost);}}
}

五、血泪总结:Cron表达式十大作死写法

错误写法正确写法翻车现象
0 0 9 * * 10 0 9 ? * 2周日执行而非周一
0 0 12 31 2 *0 0 12 L 2 ?2月31日不存在
0 */5 * * * *0 0/5 * * * *实际效果相同但易读性差
0 0 3 1-7 * 10 0 3 1-7 * 2字段冲突导致意外触发

六、课后彩蛋:在线Cron生成工具推荐

https://cron.qqe2.com/

在这里插入图片描述

“好的定时任务应该是:老板不知道它的存在,但业务离不开它的运行。” —— 佚名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web-JSON Web Token-CTFHub

前言 在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者更新了CTFHub系列,希望小伙伴们多多支持…

【FPGA】 MIPS 12条整数指令【2】

目录 实现slt 仿真 代码 完整代码 ID.v DataMem.v define.v EX.v IF.v InstMem.v MEM.v MIPS.v RegFile.v Soc.v soc_tb.v 实现slt 仿真 ori r1,r0,1100h ori r2,r0,0020h ori r3,r0,ff00h ori r4,r0,ffffh addi r5,r0,ffff slt r6,r5,r4 slt r6,r4,r…

C基础寒假练习(6)

一、终端输入行数&#xff0c;打印倒金字塔 #include <stdio.h> int main() {int rows;printf("请输入倒金字塔的行数: ");scanf("%d", &rows);for (int i rows; i > 0; i--) {// 打印空格for (int j 0; j < rows - i; j) {printf(&qu…

【C# 】图像资源的使用

在C#中&#xff0c;图像资源的使用方式方法主要依赖于你所使用的框架和库。以下是几种常见的使用图像资源的方法&#xff1a; Windows Forms 直接加载图像&#xff1a; 使用System.Drawing.Image.FromFile()方法可以直接从文件系统加载图像。 Image image Image.FromFile(&qu…

OpenGL学习笔记(六):Transformations 变换(变换矩阵、坐标系统、GLM库应用)

文章目录 向量变换使用GLM变换&#xff08;缩放、旋转、位移&#xff09;将变换矩阵传递给着色器坐标系统与MVP矩阵三维变换绘制3D立方体 & 深度测试&#xff08;Z-buffer&#xff09;练习1——更多立方体 现在我们已经知道了如何创建一个物体、着色、加入纹理。但它们都还…

OSPF基础(1):工作过程、状态机、更新

OSPF基础 1、技术背景&#xff08;与RIP密不可分&#xff0c;因为RIP中存在的问题&#xff09; RIP中存在最大跳数为15的限制&#xff0c;不能适应大规模组网周期性发送全部路由信息&#xff0c;占用大量的带宽资源以路由收敛速度慢以跳数作为度量值存在路由环路可能性每隔30秒…

python爬虫--简单登录

1&#xff0c;使用flask框架搭建一个简易网站 后端代码app.py from flask import Flask, render_template, request, redirect, url_for, sessionapp Flask(__name__) app.secret_key 123456789 # 用于加密会话数据# 模拟用户数据库 users {user1: {password: password1}…

如何在React中使用Redux进行状态管理?

在现代前端开发中&#xff0c;React已成为构建用户界面的流行选择。然而&#xff0c;随着应用规模的不断增长&#xff0c;管理组件之间的状态变得愈加复杂。为了解决这一问题&#xff0c;Redux 作为一种状态管理工具应运而生。本文将详细介绍如何在React中集成和使用Redux来进行…

HTML中的图片标签详解及路径使用【学术投稿-第五届环境资源与能源工程国际学术会议(ICEREE 2025)】

官网&#xff1a;www.iceree.org 会议时间&#xff1a;2025年2月21-23日 会议地点&#xff1a;中国-昆明 简介 第五届环境资源与能源工程国际学术会议&#xff08;ICEREE 2025&#xff09;将于2025年2月21日至23日在中国昆明隆重举行。主要围绕“能源工程和能源技术”、“环…

react的antd表格自定义图标

将原版的加号换成箭头 自定义图标 安装图标包&#xff1a; npm install --save ant-design/icons 引入&#xff1a; import { RightOutlined, DownOutlined } from ant-design/icons; 参数是一个函数 <Table columns{columns} dataSource{data} indentSize{20}expandIc…

【回溯+剪枝】单词搜索,你能用递归解决吗?

文章目录 79. 单词搜索解题思路&#xff1a;回溯&#xff08;深搜&#xff09; 剪枝 79. 单词搜索 79. 单词搜索 ​ 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …

Redis企业开发实战(二)——点评项目之商户缓存查询

目录 一、缓存介绍 二、缓存更新策略 三、如何保证redis与数据库一致性 1.解决方案概述 2.双写策略 3.双删策略 3.1延迟双删的目的 4.数据重要程度划分 四、缓存穿透 (一)缓存穿透解决方案 (二)缓存穿透示意图 五、缓存雪崩 (一)缓存雪崩解决方案 (二)缓存雪崩…

maven如何不把依赖的jar打包到同一个jar?

spring boot项目打jar包部署&#xff1a; 经过以下步骤&#xff0c; 最终会形成maven依赖的多个jar&#xff08;包括lib下添加的&#xff09;、 我们编写的程序代码打成一个jar&#xff0c;将程序jar与 依赖jar分开&#xff0c;便于管理&#xff1a; success&#xff1a; 最终…

Mac 部署Ollama + OpenWebUI完全指南

文章目录 &#x1f4bb; 环境说明&#x1f6e0;️ Ollama安装配置1. 安装[Ollama](https://github.com/ollama/ollama)2. 启动Ollama3. 模型存储位置4. 配置 Ollama &#x1f310; OpenWebUI部署1. 安装Docker2. 部署[OpenWebUI](https://www.openwebui.com/)&#xff08;可视化…

一次报警了解:direct path read、enq: KO - fast object checkpoint

背景 今天突然接到订单超时报警&#xff0c;数据库的状态确实惊出一身冷汗&#xff0c;查看系统日志正常&#xff0c;数据库日志正常&#xff0c;load 1-3之间&#xff0c;Session 连接200左右&#xff0c;未发现有负载。于是生成一个ASH报告&#xff0c;感觉比平时要慢很多&am…

Flink2支持提交StreamGraph到Flink集群

最近研究Flink源码的时候&#xff0c;发现Flink已经支持提交StreamGraph到集群了&#xff0c;替换掉了原来的提交JobGraph。 新增ExecutionPlan接口&#xff0c;将JobGraph和StreamGraph作为实现。 Flink集群Dispatcher也进行了修改&#xff0c;从JobGraph改成了接口Executio…

数据结构(1)——算法时间复杂度与空间复杂度

目录 前言 一、算法 1.1算法是什么&#xff1f; 1.2算法的特性 1.有穷性 2.确定性 3.可行性 4.输入 5.输出 二、算法效率 2.1衡量算法效率 1、事后统计方法 2、事前分析估计方法 2.2算法的复杂度 2.3时间复杂度 2.3.1定义 2.3.2大O渐进表示法 2.3.3常见时间复…

spring aop失效场景

aop基于代理&#xff08;jdk动态代理 / cglib代理&#xff09;实现&#xff0c;即new了新的类实例&#xff0c;代理了原来的定义的类实例。 目录 1. final修饰的方法无法被代理2. 静态方法无法被代理3. 内部方法调用&#xff0c;即this.method()无法被代理4. 私有方法不能代理5…

Page Assist - 本地Deepseek模型 Web UI 的安装和使用

Page Assist Page Assist是一个开源的Chrome扩展程序&#xff0c;为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI&#xff0c;与自己的AI模型进行对话&#xff0c;获取智能辅助。这种设计不仅方便了用户随时调用AI的能力&#xff0c;还保护了…

GRN前沿:STGRNS:一种基于transformer的可解释方法,用于从单细胞转录组数据推断基因调控网络

1.论文原名&#xff1a;STGRNS: an interpretable transformer-based method for inferring gene regulatory networks from single-cell transcriptomic data 2.发表日期&#xff1a;2023.4.2 摘要&#xff1a; 动机&#xff1a;单细胞RNA测序&#xff08;scRNA-seq&#xf…