springboot项目中定时任务注解@Scheduled未按cron表达式执行

news2024/11/29 10:47:45

springboot项目中定时任务注解@Scheduled未按cron表达式执行

  • 背景
      • 问题复现
      • 原因分析
      • 解决方法
      • 其他原因

背景

在将一个类注入到ioc后,其中定义了几个定时任务,分别是每隔十秒执行一次,但实际情况却是半小时才执行一次,故开始分析原因:spring scheduled默认为单线程,导致任务阻塞,很多时候不能按时执行原因

问题复现

这是正常情况下,各定时任务正常调度
在这里插入图片描述
为其中一个任务加上睡眠3分钟,发现所有的任务在睡眠期间均不会被执行
在这里插入图片描述
等待3分钟之后,其他任务均会被执行一次,再次进入等待;也就是说 其中一个任务未执行完毕,其他任务均不会被执行了
在这里插入图片描述

原因分析

将执行任务的线程打印,发现执行任务的线程均为scheduling-1
在这里插入图片描述
而当其中一个任务耗时或睡眠后,其他任务也使用这个线程,只能等待
在这里插入图片描述

解决方法

方法1- 让此方法异步处理,可以新开线程池异步 - Spring Boot 2.0 以前的实现方式

定义一个新的线程池,为耗时的线程使用,线程参数看项目调整

在这里插入图片描述
不推荐直接使用@Async让耗时方法异步,因其不可控
在这里插入图片描述
看看现在的效果,发现即便是任务2耗时,但不影响其他三个任务,而任务2本身的线程池可自行调整核心线程数与拒绝策略

在这里插入图片描述

方法2- 只需要修改配置(Spring Boot 2.1以后版本)

spring:
  task:
	scheduling:
	  pool:
		# 最大线程数,默认是 1
		size: 10
	  # 线程名称前缀,默认是 scheduling-
	  thread-name-prefix: demoScheduling-

在这里插入图片描述

其他原因

添加注解@Scheduled后,未重启项目
未在启动类或@Configuration类上加@EnableScheduling
任务类上有@ConditionalOnProperty通过配置来开关

在这里插入图片描述

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

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

相关文章

【成功解决】ERROR: cuda failure (unknow error) in error_util.h:91

点击目录可跳转 起因原因解决办法 起因 安装cudnn时,想进行验证操作,进入官方提供的$HOME/cudnn_samples_v8/mnistCUDNN/后,运行./mnistCUDNN时,报了标题的错误。如下图: 顺便提一下,我是不知道为什么报错…

UE5屏幕适配

一、本程序设计发布在手机上,首先确定屏幕的设计分辨率,这里我们选择iphone6s,750x1334。 二、设置DPI Scale为1.0的比例,点击齿轮标志 因为我们这个程序是手机竖屏使用的,所以DPI Scale Rule选择Shortest Side&#…

容器网络概述

容器就是 Container,而 Container 的另一个意思是集装箱。其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。 封闭的环境主要使用了两种技术,一种是看起来是隔离的技术,称为 namespace&am…

Pycharm中右键运行python程序时出现Run ‘pytest in XXX.py

新版本pycharm2022,调试程序的时候,无法进入__main__,最后发现是选择debug模式是pytest。 主要原因是有个函数名为test。 右键运行代码时和正常运行不一致,只执行单一函数test。右键菜单出现以下画面:“ Debug Pytho…

leetCode 279.完全平方数 动态规划 + 完全背包

给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。 示…

队列的实现——单链表

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 那么我们应该用顺序变…

No156.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Spring Boot:利用JPA进行数据库的增改

目录 JPA介绍Service接口Service和Autowired示例代码 Dao数据库操作层Repository示例代码 控制器文件示例代码-增加增加成功示例代码-修改修改成功 JPA介绍 JPA(Javaa Persistence API)一种用于持久化 Java 对象到关系型数据库的标准规范。它提供了一种统一的方式来…

LeetCode每日一题:2136. 全部开花的最早一天(2023.9.30 C++)

目录 2136. 全部开花的最早一天 题目描述: 实现代码与解析: 贪心 原理思路: 2136. 全部开花的最早一天 题目描述: 你有 n 枚花的种子。每枚种子必须先种下,才能开始生长、开花。播种需要时间,种子的生…

基于Java实现的社区团购系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统功能具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域…

MySQL 通过存储过程高效插入100w条数据

目录 一、前言二、创建表三、编写存储过程插入数据四、高效插入数据方案4.1、插入数据时删除表中全部索引4.2、存储过程中使用统一事务插入(性能显著提升)4.3、调整MySQL系统配置(性能显著提升,适合存储过程没有使用统一事务&…

云计算安全:保护你的数据免受黑客侵害

文章目录 云计算的崛起云计算安全的挑战1. 数据隐私2. 身份认证和访问控制3. 网络安全4. 云供应商安全 云计算安全的最佳实践1. 数据加密2. 强身份认证3. 访问控制4. 安全审计5. 更新和漏洞管理6. 培训和教育 云计算安全的未来1. 量子安全性2. 人工智能和机器学习3. 边缘计算安…

邮戳锁StampedLock

一、是什么 二、邮戳锁由锁饥饿问题引出 StampedLock类的乐观读锁闪亮登场,通过版本号控制 三、邮戳锁特点与缺点 StampedLock不可重入

26947-2011 手动托盘搬运车 学习记录

声明 本文是学习GB-T 26947-2011 手动托盘搬运车. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了手动托盘搬运车(以下简称托盘车)的结构参数、技术要求、试验方法、检验规则、 标志、包装、运输和贮存。 本标准适用于额定载荷…

数据仓库与数据挖掘(1)概述

一、数据仓库和数据挖掘概述 1.1 数据仓库的产生 数据仓库与数据挖掘: 数据仓库和联机分析处理技术(存储)。数据挖掘:在大量的数据中心挖掘感兴趣的知识、规则、规律、模式、约束(分析)。数据仓库用于决策分析: 数据仓库:是在数…

毛玻璃态登录表单

效果展示 页面结构组成 通过上述的效果展示可以看出如下几个效果 底部背景有三个色块并且效果是毛玻璃效果登录表单是毛玻璃效果登录表单的周围的小方块也是有毛玻璃效果并且与登录表单有层次效果 CSS3 知识点 filter 属性backdrop-filter 属性绝对定位属性动画属性 底部背…

CISSP学习笔记:密码学与对称加密算法

第六章 密码学与对称加密算法 6.1 密码学历史上的里程碑 6.1.1 凯撒密码 简单的将字母表中的每个字母替换成其后的三个字母,是单一字母的替代置换密码 6.1.2 美国内战 美国内战使用词汇替代和置换的复杂组合,从而试图破坏敌人的破译企图 6.1.3 Ult…

MySQL 用户权限和远程访问设置

目录 一、用户操作查看当前拥有用户创建用户修改用户密码删除用户给root用户开放外网访问 二、用户权限操作授予权限的原则查看授予用户的权限给用户添加权限回收权限 一、用户操作 先要使用root用户登录MySQL后在执行后面操作 查看当前拥有用户 SELECT host,user,Grant_pri…

结构型设计模式——外观模式

摘要 本文主要分析设计模式 - 结构型 - 外观(Facade),它提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。 一、外观模式的意图 提供了一个统一的接口,用来访问子系统中的一群接口,从而让…

记录 ubuntu 修改用户/root 密码步骤

1、普通用户修改密码方法 a)启动 Ubuntu,随即长按 shift 进入 grub 菜单 b)选择 Advanced options for ubuntu,即高级设置 c)选择 recovery mode,回车确认,如下图; d)在 Recovery…