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

分布式调度器--Spring Task 的使用

目录

1、启动类(App.java)上加@EnableScheduling注解: 开启基于注解的任务调度器

2、同步定时任务

3、多线程(异步)定时任务

3.1 配置线程池

3.2 开启异步支持

3.3 定义异步方法

4、Api说明

4.1 fixedDelay

4.2 fixedRate

4.3 initialDelay

4.4 cron(掌握)

cron表达式

① 格式

② 特殊符号

③ 练习

标准格式: * * * * * ?


Spring Task是 Spring 框架的一个组件,它为任务调度提供了支持,使开发者能 创建后台任务 定期执行任务

1、启动类(App.java)上加@EnableScheduling注解: 开启基于注解的任务调度器

默认情况下,系统会自动启动一个线程,调度执行项目中定义的所有定时任务

这个注解 是SpringBoot内置的 不需要依赖任何的starter包

2、同步定时任务

需要在定时执行的方法上 添加@Scheduled注解

定时执行的方法不能有参数,并且一般没有返回值

定时任务所在的类要作为 Spring Bean,在类上添加@Component注解即可,即:定时方法所在的类,要放到IOC容器里面

注意:使用@Scheduled注解形式的定时任务,默认是单线程来执行项目中所有的定时任务。

即使如果同一时刻有两个定时任务需要执行,那么只能其中一个定时任务完成之后再执行下一个定时任务。

如果项目只有一个定时任务还好。若定时任务增多时,如果一个任务被阻塞,则会导致其他任务无法正常执行。

若要改变这种行为,使得定时任务能够并发执行,可以配置任务调度线程池,来解决以上问题。首先配置一个线程池

package com.***.springtask;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
@Slf4j
@EnableAsync //开启异步支持
@EnableScheduling //开启定时任务支持
public class ScheduledTask {int i = 1;//@Scheduled(fixedRate = 5000, initialDelay = 15*1000)public void task1(){
//        i++;
//        if(i > 5){
//            ThreadUtil.safeSleep(8*1000);
//        }log.debug("task1执行了{}次,{}",i,Thread.currentThread().getId());}@Scheduled(cron = "0/5 * * * * ?")@Async("asyncScheduledPool")public void task2(){// ThreadUtil.safeSleep(8*1000);log.debug("task2执行了,{}",Thread.currentThread().getId());}}

3、多线程(异步)定时任务

3.1 配置线程池

package com.***.config;import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;@Component
public class ExecutorConfig {//定义核心线程数public static final  int CORE_POOL_SIZE = 10;// 最大线程数public static final  int MAX_POOL_SIZE = 20;// 任务队列容量大小public static final  int QUEUE_MAX_COUNT = 100;@Bean("asyncScheduledPool")public Executor asyncScheduledPool(){//自定义线程池ThreadPoolTaskExecutor threadPoolExecutor = new ThreadPoolTaskExecutor();//设置核心线程数threadPoolExecutor.setCorePoolSize(CORE_POOL_SIZE);//设置最大线程数 : 长工 +  临时工threadPoolExecutor.setMaxPoolSize(MAX_POOL_SIZE);//设置任务队列容量大小threadPoolExecutor.setQueueCapacity(QUEUE_MAX_COUNT);//设置线程的名称前缀threadPoolExecutor.setThreadNamePrefix("myTask-");//设置拒绝策略threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());return  threadPoolExecutor;}}

3.2 开启异步支持

要在 Spring Boot 应用中启用异步方法调用,需在启动类上添加 @EnableAsync 注解

3.3 定义异步方法

在服务类中定义一个方法,并使用 @Async 注解标记它以实现异步执行

4、Api说明

4.1 fixedDelay

@Scheduled(fixedDelay = 4000) 

4.2 fixedRate

@Scheduled(fixedRate = 10000) 

4.3 initialDelay

@Scheduled(initialDelay=1000, fixedRate=5000) //第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次

4.4 cron(掌握)

cron表达式

① 格式

Seconds Minutes Hours Day Month Week

② 特殊符号

*:任意值
-:范围,eg:3-5指3点到5点执行
,:枚举,eg:3,5指3点和5点执行
/:增量,eg:3/5从第3秒开始每隔5秒执行一次
?:忽略,且只能在 日期域 或 星期域 只用

③ 练习

标准格式: * * * * * ?

周一至周五的上午10:15触发

0 15 10 ? * 2-6

表示在每月的1日的凌晨2点调整任务

0 0 2 1 * ?

朝九晚五工作时间内每半小时

0 0/30 9-16 * * ?

每天上午10点,下午2点,4点

0 0 10,14,16 * * ?

表示每个星期三中午12点

0 0 12 ? * 4

在每天下午2点到下午2:59期间的每1分钟触发

0 /1 14-15 * * ?

在每天下午2点到下午2:05期间的每1分钟触发

0 0-5/1 14 * * ?

在每天下午2点到下午2:55期间的每5分钟触发

0 0-55/5 14 * * ?

在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

0 0-55/5 14,18 * * ?

相关文章:

分布式调度器--Spring Task 的使用

目录 1、启动类(App.java)上加EnableScheduling注解: 开启基于注解的任务调度器 2、同步定时任务 3、多线程(异步)定时任务 3.1 配置线程池 3.2 开启异步支持 3.3 定义异步方法 4、Api说明 4.1 fixedDelay 4.…...

Java应用程序的测试覆盖率之设计与实现(四)-- jacoco-maven-plugin

一、什么是jacoco-maven-plugin jacoco源码jacoco文档 除了使用jacoco.cli.jar导出并生成覆盖率报告外&#xff0c;还可以使用jacoco-maven-plugin&#xff0c;它是maven集成了jacoco的一款插件。 在工程pom.xml里配置插件jacoco-maven-plugin。 <plugin><groupId&g…...

UI 提供的 progress-step 要怎么实现?

前言 这天突然收到了 UI 修改设计稿的消息通知&#xff1a;“xxx 已修改 xxx 项目并 了你&#xff0c;请及时查看变更内容”&#xff0c;一条、两条、三条 …&#xff0c;修改消息铺天盖地而来&#xff0c;然后就什么都看不到了&#xff08;因为我选择开启消息免打扰&#xf…...

DBSwitch和Seatunel

一、DBSwitch 什么是DBSwitch?它主要用在什么场景&#xff1f; 通过步骤分析可以看到这个是通过配置数据源&#xff0c;采用一次性或定时方案&#xff0c;同步到数据仓库的指定表&#xff0c;并且指定映射关系的工具。有点类似于flinkcdc的增量同步。 参考&#xff1a; dbs…...

【日志】力扣刷题 -- 轮转数组

2024.10.06 【力扣刷题】 经典面试150—转轮数组—中等 189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 第一次做&#xff0c;暴力循环 // 超出时间限制 void rotate(int* nums, int numsSize, int k) {for(int i 0; i < k; i){int right numsSize - 1;int temp…...

Java 项目 Dockerfile 示例:从基础镜像选择到环境变量配置的详细指南

Java 项目 Dockerfile 示例&#xff1a;从基础镜像选择到环境变量配置的详细指南 本文提供了一个 Java 项目的 Dockerfile 示例&#xff0c;展示了如何为 Java 应用创建高效的 Docker 镜像。Dockerfile 从 OpenJDK 8 的 Java 运行环境开始&#xff0c;配置了工作目录和 JVM 启…...

WebGL编程指南 - 高级变换与动画基础

学习使用一个矩阵变换库&#xff0c;该库封装了矩阵运算的数学细节。快速上手使用该矩阵库&#xff0c;对图形进行复合变换。在该矩阵库的帮助下&#xff0c;实现简单的动画效果。 矩阵变换库&#xff1a;cuon-matrix.js OpenGL中的函数&#xff1a; 书中 cuon-matrix.js 函数…...

银行客户贷款行为数据挖掘与分析

#1024程序员节 | 征文# 在新时代下&#xff0c;消费者的需求结构、内容与方式发生巨大改变&#xff0c;企业要想获取更多竞争优势&#xff0c;需要借助大数据技术持续创新。本文分析了传统商业银行面临的挑战&#xff0c;并基于knn、逻辑回归、人工神经网络三种算法&#xff0…...

制程质量管理方案设计

质量管理系统框架——QMS 涵盖产生产制造体系的全生命周期的质量管理过程 与SAP、WMS、MES、OA等业务系统进行集成&#xff0c;整合各业务系统中的质量信息 利用整合的全价值链质量信息&#xff0c;寻找质量改进点和质量创新点 系统功能模块管理 系统管理&#xff1a;用户管理…...

uniapp移动端优惠券! 附源码!!!!

本文为常见的移动端uniapp优惠券&#xff0c;共有6种优惠券样式&#xff08;参考了常见的优惠券&#xff09;&#xff0c;文本内容仅为示例&#xff0c;您可在此基础上调整为你想要的文本 预览效果 通过模拟数据&#xff0c;实现点击使用优惠券让其变为灰色的效果&#xff08;模…...

【分布式技术】中间件-zookeeper安装配置

文章目录 安装部署1. 安装ZooKeeper2. 配置ZooKeeper3. 启动ZooKeeper服务器4. 使用ZooKeeper命令行客户端5. 使用ZooKeeper的四个基本操作6. ZooKeeper集群模式7. 安全和权限8. 监控和日志 相关文献 安装部署 在Linux环境中操作ZooKeeper通常涉及以下几个方面&#xff1a; 1…...

高等数学 7.6高阶线性微分方程

文章目录 一、线性微分方程的解的结构*二、常数变易法 方程 d 2 y d x 2 P ( x ) d y d x Q ( x ) f ( x ) (1) \cfrac{\mathrm{d}^2 y}{\mathrm{d}x^2} P(x) \cfrac{\mathrm{d}y}{\mathrm{d}x} Q(x) f(x) \tag{1} dx2d2y​P(x)dxdy​Q(x)f(x)(1) 叫做二阶线性微分方程。…...

LSP的建立

MPLS需要为报文事先分配好标签&#xff0c;建立一条LSP&#xff0c;才能进行报文转发。LSP分为静态LSP和动态LSP两种。 静态LSP的建立 静态LSP是用户通过手工为各个转发等价类分配标签而建立的。由于静态LSP各节点上不能相互感知到整个LSP的情况&#xff0c;因此静态LSP是一个…...

huggingface的数据集下载(linux下clone)

1. 安装lfs sudo apt-get install git-lfs 或者 apt-get install git-lfs 2. git lfs install git lfs install 3. git clone dataset包 第2&#xff0c;3步骤的截图如下&#xff1a;...

Java使用dom4j生成kml(xml)文件遇到No such namespace prefix: xxx is in scope on:问题解决

介绍addAttribute和addNamepsace: addAttribute 方法 addAttribute 方法用于给XML元素添加属性。属性&#xff08;Attributes&#xff09;是元素的修饰符&#xff0c;提供了关于元素的额外信息&#xff0c;并且位于元素的开始标签中。属性通常用于指定元素的行为或样式&#…...

深入探讨Java中的LongAdder:使用技巧与避坑指南

文章目录 一、什么是LongAdder&#xff1f;二、LongAdder的简单使用示例代码&#xff1a; 三、LongAdder的工作原理四、LongAdder的常见使用场景五、使用LongAdder时的注意事项&#xff08;避坑指南&#xff09;1. 不要滥用LongAdder2. sum()方法与精度问题3. 避免过度使用rese…...

【本科毕业设计】基于单片机的智能家居防火防盗报警系统

基于单片机的智能家居防火防盗报警系统 相关资料链接下载摘要Abstract第1章 绪论1.1课题的背景1.2 研究的目的和意义 第2章 系统总体方案设计2.1 设计要求2.2 方案选择和论证2.2.1 单片机的选择2.2.2 显示方案的选择 第3章 系统硬件设计3.1 整体方案设计3.1.1 系统概述3.1.2 系…...

C语言 动态数据结构的C语言实现单向链表-2

建立一个单向链表 在单向链表中查找节点---查找尾节点 在单向链表中查找节点 --- 查找第 n 个节点 向单向链表中插入一个节点 向单向链表的尾部插入一个节点 向单向链表中某节点后插入一个节点 向单向链表中插入一个节点 删除单向链表中的某一节点 链表 vs 数组 动态数据结构...

Github 2024-10-23C开源项目日报 Top10

根据Github Trendings的统计,今日(2024-10-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10PLpgSQL项目1Redis - 内存数据库和数据结构服务器 创建周期:5411 天开发语言:C协议类型:BSD 3-Clause “New” or “Revised” Licen…...

ubuntu20.04 opencv4.0 /usr/local/lib/libgflags.a(gflags.cc.o): relocation报错解决

在一个只有ubuntu20.04的docker环境中配置opencv4.0.0, 什么库都没有&#xff0c;都要重新安装&#xff0c; 其他的问题在网上都找到了解决方案&#xff0c;唯独这个问题比较棘手&#xff1a; [ 86%] Linking CXX executable …/…/bin/opencv_annotation /usr/bin/ld: /usr/lo…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...