当前位置: 首页 > news >正文

SpringBoot 定时任务实践、定时任务按指定时间执行

Q1. springboot怎样创建定时任务?

很显然,人人都知道,@Scheduled(cron = ".....")

Q2. 如上所示创建了定时任务却未能执行是为什么?

如果你的cron确定没写错的话

cron表达式是否合法,可参考此处,https://tool.lu/crontab/,选择Spring表达式。

那么可能是你启动类少了一个注解:@EnableScheduling
如下图
在这里插入图片描述


Q3. 多个定时任务,未能严格按照指定的时间执行,为什么?

比如有4个定时任务,分别是每天凌晨的1点整、2点整、3点整、4点整执行;
但观察日志发现并不是。
比如1点整开始执行第一个(如果会执行很久的话)
2点半才开始执行第2个
后面的以此类推都不一定严格按照指定时间。
那么,为什么?

因为springboot里面的定时任务默认是单线程执行的。后面的定时任务会排队、顺延。
比如Job1执行了1.5h,Job2的时间尽管到了,但没有线程可用,就只能等Job1完成之后才执行。
所以就会出现顺延现象。

Q4. 如何确保定时任务在特定时间执行?

这里思路就很简单了,多线程,即创建一个线程池,比如4个线程,并且指定使用这个线程池里的线程来做这4个定时任务,肯定是足够的。
这样的话就不会依次影响了。

注意,只给定时任务增加@Async注解是不够的。

step1,初始化线程池

文件1, SchedulerConfig.java
package cn.xxx.starter.config;import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;import javax.annotation.Resource;/*** @author * @date 2024/4/2 14:22* @desc*/
@Configuration
public class SchedulerConfig implements SchedulingConfigurer {@Resourceprivate ThreadPoolTaskScheduler threadPoolTaskScheduler;@Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);}
}
文件2, ThreadPoolTaskSchedulerConfig.java
package cn.xxx.starter.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;import java.util.concurrent.Executor;/*** @author * @date 2024/4/1 17:45* @desc*/
@Configuration
@EnableAsync
public class ThreadPoolTaskSchedulerConfig {private int corePoolSize = 4;@Beanpublic ThreadPoolTaskScheduler threadPoolTaskScheduler() {ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();//线程池大小为10threadPoolTaskScheduler.setPoolSize(corePoolSize);//设置线程名称前缀threadPoolTaskScheduler.setThreadNamePrefix("AsyncJob-thread-");//关键点: 设置线程池关闭的时候等待所有任务都完成再继续销毁其他的BeanthreadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);//关键点:设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住threadPoolTaskScheduler.setAwaitTerminationSeconds(60 * 60);threadPoolTaskScheduler.initialize();return threadPoolTaskScheduler;}
}

step2 ,启动定时任务时指定使用此线程池

XxxxJob.java

package cn.xxx.starter.task.job;import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Slf4j
@Component
public class Job1{@Async(value = "threadPoolTaskScheduler")@Scheduled(cron = "0 30 */1 * * ?")public void execute() {       try {//......}catch (Exception e){log.error("Job1出错 e = {}, stackTrace = {} ", e.getMessage(), JSON.toJSONString(e.getStackTrace()));}finally {log.info("Job1结束");       }}
}

相关文章:

SpringBoot 定时任务实践、定时任务按指定时间执行

Q1. springboot怎样创建定时任务? 很显然,人人都知道,Scheduled(cron ".....") Q2. 如上所示创建了定时任务却未能执行是为什么? 如果你的cron确定没写错的话 cron表达式是否合法,可参考此处&#xff0c…...

MYSQL数据库故障排除与优化

目录 MySQL 单实例故障排查 MySQL 主从故障排查 MySQL 优化 MySQL 单实例故障排查 故障现象 1 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /data/mysql/mysql.sock (2) 问题分析:以上这种情况一般都…...

算法-数论-蓝桥杯

算法-数论 1、最大公约数 def gcd(a,b):if b 0:return areturn gcd(b, a%b) # a和b的最大公约数等于b与a mod b 的最大公约数def gcd(a,b):while b ! 0:cur aa bb cur%bpassreturn a欧几里得算法 a可以表示成a kb r(a,b,k&#xff0c…...

222.完全二叉树节点个数

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…...

C++中的string类操作详解

引言 针对C中的string,本文主要讲解如何对其进行插入、删除、查找、比较、截断、分割以及与数字之间的相互转换等。 字符串插入 1. append方法 std::string str "hello"; str.append(7, w); // 在末尾添加7个字符w str.append("wwwwwww");…...

Java绘图坐标体系

一、介绍 下图说明了Java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐…...

【MATLAB源码-第38期】基于OFDM的块状导频和梳状导频误码率性能对比,以及LS/LMMSE两种信道估计方法以及不同调制方式对比。

操作环境: MATLAB 2022a 1、算法描述 块状导频和梳状导频都是用于无线通信系统中信道估计的方法。 块状导频: 定义: 在频域上,块状导频是连续放置的一组导频符号。这意味着所有的导频符号都集中在一个短的时间段内发送。 优点…...

javaWeb车辆管理系统设计与实现

摘 要 随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得以普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理分配使用问题。 企业车辆管理系统运用现代化的计算机管理手段,不但可以对车辆的使用进行合理的管理,…...

【DM8】间隔分区

是范围分区的一个扩展 如果使用了间隔函数做分区,在数据插入的时候,如果没有合适的分区,数据库会自动创建一个新的分区。 –year往后推两年 SELECT SYSDATE numtoyminterval(2,‘YEAR’); –month往后推两年 SELECT SYSDATE numtoyminterv…...

0基础如何进入IT行业?

目录 0基础如何进入IT行业? 一、学习路径 二、技能培养 三、实践经验 0基础如何进入IT行业? 对于没有任何相关背景知识的人来说,成功进入IT行业可能看起来是一个遥不可及的目标。然而,只要有正确的方法和坚持不懈的努力&#…...

C#将Console写至文件,且文件固定最大长度

参考文章 将C#的Console.Write同步到控制台和log文件输出 业务需求 在生产环境中,控制台窗口不便展示出来。 为了在生产环境中,完整记录控制台应用的输出,选择将其输出到文件中。 但是,一次性存储所有输出的话,文件会…...

《CSS 知识点》仅在文本有省略号时添加 tip 信息

html <div ref"btns" class"btns"><div class"btn" >这是一段很短的文本.</div><div class"btn" >这是一段很短的文本.</div><div class"btn" >这是一段很长的文本.有省略号和tip.<…...

彩虹聚合DNS管理系统v1.0全新发布

聚合DNS管理系统&#xff08;https://github.com/netcccyun/dnsmgr&#xff09;可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户&#xff0c;每个用户可分配不同的…...

3.10 Python数据类型转换

Python类型转换&#xff0c;Python数据类型转换函数大全 虽然 Python 是弱类型编程语言&#xff0c;不需要像Java或 C 语言那样还要在使用变量前声明变量的类型&#xff0c;但在一些特定场景中&#xff0c;仍然需要用到类型转换。 比如说&#xff0c;我们想通过使用 print() …...

Kotlin基础学习

Kotlin基础学习主要涵盖安装Kotlin编译器、了解基础语法、学习变量声明、类型推断、函数定义以及控制结构等方面。以下是一个简要的Kotlin基础学习指南&#xff1a; 一、安装Kotlin 首先&#xff0c;你需要从JetBrains的官方网站下载并安装Kotlin编译器。同时&#xff0c;你也…...

配置交换机 SSH 管理和端口安全——实验1:配置交换机基本安全和 SSH管理

实验目的 通过本实验可以掌握&#xff1a; 交换机基本安全配置。SSH 的工作原理和 SSH服务端和客户端的配置。 实验拓扑 交换机基本安全和 SSH管理实验拓扑如图所示。 交换机基本安全和 SSH管理实验拓扑 实验步骤 &#xff08;1&#xff09;配置交换机S1 Switch>enab…...

海山数据库(He3DB)原理剖析:浅析Doris跨源分析能力

Doris湖仓分析背景&#xff1a; Doris多数据源功能演进 Doris的生态近年来围绕湖仓分析做了较多工作&#xff0c;Doris一直在积极拓宽大数据生态的OLAP分析市场&#xff0c;Doris2.0之后为了满足湖仓分析场景&#xff0c;围绕multi-catalog、数据缓存、容错、pipeline资源管理…...

第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 题解

VP比赛链接 : 数据加载中... - 蓝桥云课 1 . 九进制 转 十进制 直接模拟就好了 #include <iostream> using namespace std; int main() {// 请在此输入您的代码int x 22*92*81*9;cout << x << endl ;return 0; } 2 . 顺子日期 枚举出每个情况即可 : …...

20240324-1-集成学习面试题EnsembleLearning

集成学习面试题 1. 什么是集成学习算法&#xff1f; 集成学习算法是一种优化手段或者策略&#xff0c;将多个较弱的模型集成模型组&#xff0c;一般的弱分类器可以是决策树&#xff0c;SVM&#xff0c;KNN等构成。其中的模型可以单独进行训练&#xff0c;并且它们的预测能以某…...

默克尔(Merkle)树 - 原理及用途

默克尔&#xff08;Merkle&#xff09;树的原理以及用途 引言 在当今数字化时代&#xff0c;确保数据的完整性是至关重要的。默克尔树作为一种高效的数据结构&#xff0c;被广泛应用于网络安全、分布式系统以及加密货币等领域&#xff0c;用于验证大量数据的完整性和一致性 数…...

帆软FineDB数据库驱动上传权限配置与实战指南

1. 为什么需要配置数据库驱动上传权限 在企业级报表开发中&#xff0c;经常会遇到需要连接特殊数据库的场景。帆软报表平台默认只内置了常见数据库的驱动&#xff0c;比如MySQL、Oracle这些。但实际项目中&#xff0c;我们可能需要连接达梦、GBase这些国产数据库&#xff0c;或…...

OpenClaw技能开发入门:为Qwen3-4B定制专属自动化模块

OpenClaw技能开发入门&#xff1a;为Qwen3-4B定制专属自动化模块 1. 为什么需要自定义OpenClaw技能 去年夏天&#xff0c;我接手了一个重复性极高的周报生成工作。每周都要从十几个PDF报告中提取关键数据&#xff0c;整理成固定格式的Excel表格&#xff0c;再转成PPT汇报。当…...

3步打造专业级H5页面:开源编辑器h5maker零代码解决方案

3步打造专业级H5页面&#xff1a;开源编辑器h5maker零代码解决方案 【免费下载链接】h5maker h5编辑器类似maka、易企秀 账号/密码&#xff1a;admin 项目地址: https://gitcode.com/gh_mirrors/h5/h5maker 在数字化营销与内容传播领域&#xff0c;H5页面已成为连接品牌…...

从CPython 3.12到3.14:我们逆向了217个AOT相关PR,提炼出6个决定编译成功率的核心宏定义(含Py_BUILD_CORE_MODULE与Py_LIMITED_API冲突解决方案)

第一章&#xff1a;Python 原生 AOT 编译方案 2026 高级开发技巧Python 社区在 2026 年迎来关键演进&#xff1a;CPython 官方正式集成原生 Ahead-of-Time&#xff08;AOT&#xff09;编译能力&#xff0c;无需依赖第三方运行时或 JIT 层即可生成平台专用的静态可执行文件。该特…...

InstantID社区翻译计划:多语言支持的实现与贡献方式

InstantID社区翻译计划&#xff1a;多语言支持的实现与贡献方式 【免费下载链接】InstantID 项目地址: https://ai.gitcode.com/hf_mirrors/InstantX/InstantID InstantID作为一款创新的AI人脸编辑工具&#xff0c;正通过社区翻译计划打破语言壁垒&#xff0c;让全球用…...

硅橡胶资源平台对接的靠谱对接企业哪家强

在深圳这座创新与制造之都&#xff0c;硅橡胶产业上下游企业林立&#xff0c;从原材料、模具设计到制品生产&#xff0c;形成了一个庞大而复杂的产业链。对于许多企业而言&#xff0c;“深圳硅橡胶资源平台对接” 的需求日益迫切——无论是寻找稳定供应商、开拓新客户&#xff…...

AI赋能开发:让快马平台智能生成基于contextmenumanager的动态条件式右键菜单代码

最近在做一个电商项目时&#xff0c;遇到了一个有趣的交互需求&#xff1a;需要为不同类型的商品卡片实现智能化的右键菜单。这个需求让我发现了InsCode(快马)平台的AI辅助开发功能特别实用&#xff0c;尤其是对于contextmenumanager这种需要动态逻辑的场景。 需求分析 页面上有…...

OpenClaw+SecGPT-14B联动方案:3类网络安全自动化场景实测

OpenClawSecGPT-14B联动方案&#xff1a;3类网络安全自动化场景实测 1. 为什么选择这个技术组合&#xff1f; 去年我在做安全研究时&#xff0c;经常需要重复处理三类任务&#xff1a;分析漏洞报告、检查日志异常、收集威胁情报。这些工作既需要专业判断&#xff0c;又包含大…...

别再只用SUM了!用Excel分析Kaggle数据集,我发现了这些销售秘密

别再只用SUM了&#xff01;用Excel分析Kaggle数据集&#xff0c;我发现了这些销售秘密 作为一名常年与Excel打交道的业务分析师&#xff0c;我习惯了用SUM和VLOOKUP解决80%的问题。直到上个月&#xff0c;当我偶然下载了Kaggle上的牛油果销售数据集&#xff0c;才发现这个"…...

精益生产线功能拆解:如何利用精益生产线解决多品种小批量生产难题

在当前的制造业环境中&#xff0c;订单碎片化已成为常态&#xff0c;精益生产线不再是一个可选的优化项&#xff0c;而是企业生存的必修课。面对多品种、小批量的市场需求&#xff0c;传统的大批量流水线往往显得笨重不堪&#xff0c;频繁换型导致的停机、在制品积压造成的资金…...