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

java 定时任务不按照规定时间执行

这里写目录标题

  • 使用异步启动可能出现的问题
  • 排查代码中添加的定时任务步骤是否正确
  • 排查是否任务阻塞,如果定时任务出现异常阻塞后,将不会在次执行
  • java中多个@Scheduled定时器不执行
    • 为了让@Scheduled效率更高,我们可以通过两种方法将定时任务变成多线程执行:
      • 方法1、在启动类中配置TaskScheduler线程池大小:
      • 方法2、利用Spring提供的@Async注解和@EnableAsync注解
    • 方法三 主启动类添加线程
    • 或者使用配置类的形式
      • 定时任务测试

**是因为springboot默认给定时任务配置的线程池只有一个线程,当很多个定时任务都加了异步注解,没有配置线程池时,他们会因为只有一个线程出问题。
因为springboot的定时任务默认的线程池只有一个线程,就算加了异步,也不能使得一个任务结束下个任务才能开始,所以要配置一下或者重写定时任务的线程池,也可以将异步注解去掉,将异步注解去掉,springboot就会给定时任务配置一个固定的线程,不受干扰.
没有配置定时任务线程池时,默认用的是springboot分配给定时任务的线程池SimpleAsyncTaskExecutor,当一个服务定时任务过多时,会有问题比如你一个任务的周期是5秒,= 这5秒你要发送100条短信,用之前的固定的线程肯定没有问题,现在你改成多个线程。5秒如果你上个任务没有执行完成,那现在你任务的第二个周期到了还是会执行,如果没有控制可能会重复发=
**

使用异步启动可能出现的问题

会有问题比如你一个任务的周期是5秒, 这5秒你要发送100条短信,用之前的固定的线程肯定没有问题,现在你改成多个线程。5秒如果你上个任务没有执行完成,那现在你任务的第二个周期到了还是会执行,如果没有控制可能会重复发 

排查代码中添加的定时任务步骤是否正确

启动类上加 @EnableScheduling 注解
定时任务类上加@Component
定时方法上加@Scheduled

排查是否任务阻塞,如果定时任务出现异常阻塞后,将不会在次执行

解决:进行trycatch异常抛出

java中多个@Scheduled定时器不执行

原因是:@Scheduled注解会在默认情况下以单线程的方式执行定时任务。
这个“单线程”指两个方面:

如果一个定时任务执行时间大于其任务间隔时间,那么下一次将会等待上一次执行结束后再继续执行。
如果多个定时任务在同一时刻执行,任务会依次执行

为了让@Scheduled效率更高,我们可以通过两种方法将定时任务变成多线程执行:

方法1、在启动类中配置TaskScheduler线程池大小:

@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10);//不配置默认是1
return taskScheduler;
}

方法2、利用Spring提供的@Async注解和@EnableAsync注解

@Component
@EnableAsync   //开启异步支持
public class TimedTask{
@Async // 对某个方法进行异步执行
@Scheduled(initialDelay = 1,fixedDelay=10000)//initialDelay 在容器启动后,延迟1毫秒再执行一次定时器
//fixedDelay  以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次
public void aa() {
//执行业务逻辑
}@Async
@Scheduled(initialDelay = 1,fixedDelay=10000)
public void bb() {
//执行业务逻辑
}

方法三 主启动类添加线程

复制代码
@Beanpublic Executor executor1() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setThreadNamePrefix("test-schedule1-");executor.setMaxPoolSize(20);executor.setCorePoolSize(15);executor.setQueueCapacity(10);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}
复制代码

或者使用配置类的形式

@Configuration
@EnableAsync
public class ExecutorConfig {@Beanpublic Executor executor1() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setThreadNamePrefix("test-schedule1-");executor.setMaxPoolSize(20);executor.setCorePoolSize(15);executor.setQueueCapacity(10);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}@Beanpublic Executor executor2() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setThreadNamePrefix("test-schedule2-");executor.setMaxPoolSize(20);executor.setCorePoolSize(15);executor.setQueueCapacity(10);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}}

定时任务测试

@Component
@Slf4j
@EnableScheduling
public class test {@Async("executor1")  //指定线程池bean的名字  为什么是这个名字,可以自行学习下spring 关于bean的生命周期和创建过程@Scheduled(cron = "0 0/1 * * * ?")public void test() {System.out.println(Thread.currentThread().getName());}
}
复制代码
@Component
@Slf4j
@EnableScheduling
public class test1 {@Async@Scheduled(cron = "0 0/1 * * * ?")public void test1() {System.out.println(Thread.currentThread().getName() + "-------");}
}

执行结果
可以看到未指定线程池,默认就会使用的是SimpleAsyncTaskExecutor
在这里插入图片描述
也可以选择不配置异步,用同步,那么springboot就会给它分配固定的线程,不会被干扰
– 没有配置定时任务线程池时,默认用的是springboot分配给定时任务的线程池SimpleAsyncTaskExecutor,
在这里插入图片描述

相关文章:

java 定时任务不按照规定时间执行

这里写目录标题 使用异步启动可能出现的问题排查代码中添加的定时任务步骤是否正确排查是否任务阻塞,如果定时任务出现异常阻塞后,将不会在次执行java中多个Scheduled定时器不执行为了让Scheduled效率更高,我们可以通过两种方法将定时任务变成…...

Android复习(Android基础-四大组件)—— Activity

Activity作为四大组件之首,是使用最为频繁的一种组件,中文直接翻译为"活动",不过如果被翻译为"界面"会更好理解。正常情况,除了Window,Dialog和Toast , 我们能见到的界面只有Activity。…...

Linux系统安装部署MongoDB完整教程(图文详解)

前言:本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程,我的服务器采用的是Centos7,在部署之前我重装了我的服务器,目的是为了干净整洁的给大家演示我是如何一步步的操作的,整体部署还是挺简洁&#xff0c…...

CSS图片放到<div>里面,自适应宽高全部显示,点击图片跳到新页面预览,点击旋转按钮图片可旋转

有一个需求是图片放到一个固定宽高的<div>里面&#xff0c;不管是横图还是竖图&#xff0c;都要全部显示出来并且保持图片的长宽比例不变形&#xff0c;点击图片可以跳到一个新页面预览&#xff0c;代码如下&#xff1a; <!DOCTYPE html> <html> <head>…...

二阶段web基础与http协议

dns与域名 网络是基于tcp/ip协议进行通信和连接的 应用层-----传输层-----网络层-----数据链路层-----物理层 ip地址&#xff0c;每一台主机都有一个唯一的地址标识&#xff08;固定的ip地址&#xff09; 1.区分用户和计算机 2.通信 ip地址的问题在于32位二进制数组成的&…...

SpringBoot+Freemark根据html模板动态导出PDF

SpringBootFreemark根据html模板导出PDF 1、引入maven2、两个工具类2.1 test.html模板2.2 test.html模板中的Freemark语法 3、controller导出pdf 1、引入maven 导出pdf的一些必要jar包 <dependency><groupId>org.projectlombok</groupId><artifactId>…...

XPath数据提取与贴吧爬虫应用示例

XPath数据提取与贴吧爬虫应用示例 XpathXpath概述Xpath Helper插件 XPath语法基本语法查找特定节点选取未知节点选取若干路径 lxml模块使用说明使用示例 百度贴吧爬虫 Xpath Xpath概述 XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语…...

字符串匹配-KMP算法

KMP算法&#xff0c;字符串匹配算法&#xff0c;给定一个主串S&#xff0c;和一个字串T,返回字串T与之S匹配的数组下标。 在学KMP算法之前&#xff0c;对于两个字符串&#xff0c;主串S&#xff0c;和字串T&#xff0c;我们根据暴力匹配&#xff0c;定义两个指针&#xff0c;i指…...

Java面向对象之UML类图

UML类图 表示 public 类型&#xff0c; - 表示 private 类型&#xff0c;#表示protected类型方法的写法&#xff1a;方法的类型(、-) 方法名(参数名&#xff1a; 参数类型)&#xff1a;返回值类型...

【机器学习】西瓜书学习心得及课后习题参考答案—第4章决策树

这一章学起来较为简单&#xff0c;也比较好理解。 4.1基本流程——介绍了决策树的一个基本的流程。叶结点对应于决策结果&#xff0c;其他每个结点则对应于一个属性测试&#xff1b;每个结点包含的样本集合根据属性测试的结果被划分到子结点中&#xff1b;根结点包含样本全集&a…...

2023.8.2

2022河南萌新联赛第&#xff08;三&#xff09;场&#xff1a;河南大学\神奇数字.cpp //题意&#xff1a;给定三个正整数a b c,求x满足满足abc同余x的个数。 //这个考虑同余的性质&#xff0c;就是两个数的差去取模为0的数肯定是这两个数的同余数,。因此我们计算三个数两两之…...

windows运行窗口常用快捷键命令

winr打开运行窗口,然后输入快捷命令:&#xff08;当然utools和win11搜索也挺好用的&#xff09; cmd : 命令行窗口&#xff08;命令提示符窗口、cmd窗口&#xff09;regedit : 注册表mspaint : 画图工具services.msc : 本地服务设置(比如查看mysql服务是否启动成功)devmgmt.ms…...

HDFS的QJM方案

Quorum Journal Manager仲裁日志管理器 介绍主备切换&#xff0c;脑裂问题解决---ZKFailoverController&#xff08;zkfc&#xff09;主备切换&#xff0c;脑裂问题解决-- Fencing&#xff08;隔离&#xff09;机制主备数据状态同步问题解决 HA集群搭建集群基础环境准备HA集群规…...

安装win版本的neo4j(2023最新版本)

安装win版本的neo4j 写在最前面安装 win版本的neo4j1. 安装JDK2.下载配置环境变量&#xff08;也可选择直接点击快捷方式&#xff0c;就可以不用配环境了&#xff09;3. 启动neo4j 测试代码遇到的问题及解决&#xff08;每次环境都太离谱了&#xff0c;各种问题&#xff09;连接…...

ChatGPT结合知识图谱构建医疗问答应用 (二) - 构建问答流程

一、ChatGPT结合知识图谱 上篇文章对医疗数据集进行了整理&#xff0c;并写入了知识图谱中&#xff0c;本篇文章将结合 ChatGPT 构建基于知识图谱的问答应用。 下面是上篇文章的地址&#xff1a; ChatGPT结合知识图谱构建医疗问答应用 (一) - 构建知识图谱 这里实现问答的流程…...

聊天系统登录后端实现

定义返回的数据格式 # Restful API from flask import jsonifyclass HttpCode(object):# 响应正常ok 200# 没有登陆错误unloginerror 401# 没有权限错误permissionerror 403# 客户端参数错误paramserror 400# 服务器错误servererror 500def _restful_result(code, messa…...

Ajax笔记_01(知识点、包含代码和详细解析)

Ajax_01笔记 前置知识点 在JavaScript中 问题1&#xff1a;将数组转为字符串&#xff0c;以及字符串转为数组的方式。 问题2、将对象转为字符串&#xff0c;以及字符串转为对象的方法。 方法&#xff1a; 问题1&#xff1a; 将数组转为字符串可以使用 join() 方法。例如&…...

Eureka 学习笔记2:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…...

Spring引入并启用log4j日志框架-----Spring框架

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...

Redis实现延时队列

缓存队列延时向接口报工&#xff0c;并支持多实例部署。 引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-data</artifactId><version>3.17.4</version> </dependency> 注入RedisClient …...

从原理到代码:固高GTS控制卡SmartHome回零功能完整开发指南(附C#示例)

从原理到代码&#xff1a;固高GTS控制卡SmartHome回零功能完整开发指南&#xff08;附C#示例&#xff09; 在工业自动化领域&#xff0c;运动控制系统的精度和可靠性往往取决于一个看似简单却至关重要的功能——回零操作。作为固高GTS系列控制卡的核心功能之一&#xff0c;Smar…...

OpenClaw家装设计:Qwen2.5-VL-7B根据户型图生成3D效果示意图

OpenClaw家装设计&#xff1a;Qwen2.5-VL-7B根据户型图生成3D效果示意图 1. 为什么选择OpenClaw做家装设计自动化 去年装修新房时&#xff0c;我花了大量时间在设计师和施工队之间来回沟通。每次修改设计方案都需要等待设计师重新出图&#xff0c;周期长、成本高。直到发现Op…...

板对板排针连接器对电子设计有哪些影响

在电子设计领域&#xff0c;哪怕是看着不起眼的小元件&#xff0c;也能起到关键作用&#xff0c;板对板排针连接器就是这样的存在。别看它体积小巧&#xff0c;却是电子设备里的核心连接部件&#xff0c;能让印刷电路板&#xff08;PCB&#xff09;之间实现无缝对接&#xff0c…...

KT0803K FM发射芯片Arduino驱动开发与射频工程实践

1. KT0803系列FM发射芯片Arduino库深度解析与工程实践指南1.1 芯片定位与系统级约束KT0803及其衍生型号&#xff08;KT0803K/L/M&#xff09;是高度集成的单芯片FM广播发射器&#xff0c;专为低功耗、小体积音频广播应用设计。该系列芯片内部集成了PLL频率合成器、立体声编码器…...

MCP3208 12位SPI ADC嵌入式驱动与硬件设计实战

1. MCP3208芯片深度解析&#xff1a;面向嵌入式系统的12位8通道SPI模数转换器工程实践1.1 芯片定位与核心价值MCP3208是Microchip公司推出的逐次逼近型&#xff08;SAR&#xff09;模数转换器&#xff0c;专为资源受限的嵌入式系统设计。其核心价值在于以极简硬件接口&#xff…...

Nunchaku-flux-1-dev模型服务监控:使用Node.js搭建性能仪表盘

Nunchaku-flux-1-dev模型服务监控&#xff1a;使用Node.js搭建性能仪表盘 你是不是也遇到过这种情况&#xff1f;自己部署的AI模型服务&#xff0c;用着用着突然就变慢了&#xff0c;或者干脆没响应了&#xff0c;用户反馈过来才知道出了问题。等到发现的时候&#xff0c;可能…...

MIKE URBAN中如何添加污水管水质

管网中的水质一直是管网模型中的一个难题&#xff0c;很多群友也要求小编更新水质方面的内容&#xff0c;一方面&#xff0c;其实水质相关的内容官方资料已经很多了&#xff0c; 觉得没必要重复更新。另一方面&#xff0c;管道水质率定实在太难以率定&#xff0c;很难算的准确。…...

基于Python的多媒体信息共享平台毕业设计源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于Python的多媒体信息共享平台&#xff0c;以满足现代网络环境下多媒体信息传播的需求。具体研究目的如下&#xff1a;构建一个高效、…...

Ollama在Apple Silicon上预览,性能大提升

2026年3月30日&#xff0c;Ollama开启在Apple silicon上的预览&#xff0c;由苹果MLX框架支持&#xff0c;解锁新性能&#xff0c;加速繁重工作&#xff0c;还在多方面有显著改进。MLX驱动&#xff0c;性能飞升基于Apple silicon的Ollama构建在MLX框架上&#xff0c;利用统一内…...

CSS 容器查询:组件级响应式设计

CSS 容器查询&#xff1a;组件级响应式设计代码如诗&#xff0c;容器如画。让我们用容器查询的强大能力&#xff0c;创建真正自适应的组件。什么是容器查询&#xff1f; 容器查询&#xff08;Container Queries&#xff09;是 CSS 中一项革命性的特性&#xff0c;它允许我们根据…...