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

Spring Boot项目使用多线程执行定时任务

我在一个Spring Boot项目中,采用定时器执行一些操作,比如10秒就发送一次数据。这些操作有2个,如下所示。我就想,虽然这两个操作各自指定了时间频率,但如果其中一个操作非常耗时,会不会影响其他操作呢?

答案是会。

@Service
public class ShareDataBySend {@AutowiredSendDataService sendDataService;//操作1@Scheduled(fixedRateString = "${sff.interval}")  // 每 * 秒执行一次private void send() {sendDataService.sendThem();}//操作2@Scheduled(fixedRateString = "${sff.interval}")  // 每 * 秒执行一次private void send2() {sendDataService.sendNce();}
}

怎么办呢?AI告诉我,引入多线程。

一、引入多线程

上面代码中,使用了注解@Scheduled。这个注解告诉 Spring ,它需要定期执行标注的方法。@Scheduled依赖于 Spring 的任务调度机制,默认使用一个单线程的任务调度器执行任务。如果没有显式地配置线程池,所有的定时任务都会在同一个线程中按顺序执行。然而,当我们配置一个线程池任务调度器时,Spring 会自动使用这个调度器,这样每个定时任务(如 send() 和 send2())就会在不同的线程中并发执行。

也就是说,我们不需要修改上面这个ShareDataBySend类,而是新注册一个线程池任务调度器,系统就会自动改用多线程。这一切,都源自于Spring Boot框架的本身机制。

二、代码示例

1、新增线程池任务调度器配置类

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;@Configuration
public class SchedulerConfig implements SchedulingConfigurer {/*** 我们将默认的单线程调度器替换成了 ThreadPoolTaskScheduler,并设置了线程池大小(例如 10)。* 这意味着多达 10 个任务可以并发执行。*/@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();taskScheduler.setPoolSize(10);  // 设置线程池大小,可根据需要调整taskScheduler.initialize();taskRegistrar.setTaskScheduler(taskScheduler);}
}

在系统启动的时候,Spring Boot会将带有@Config注解的类型实例化到容器中,因此SchedulerConfig 配置的 ThreadPoolTaskScheduler 被初始化。当定时任务触发时(根据 @Scheduled 的定义),任务被提交给 ThreadPoolTaskScheduler 处理。如果有多个任务,它们会被分配到线程池中的不同线程上执行,从而实现并发。

2、原ShareDataBySend类

不需要作任何修改

三、小结

我用java也有好几年了。其实一直都是在用Spring Boot。Spring Boot是一个java开发框架,但我感觉Spring Boot已经足够优秀和方便,对于我来说,Spring Boot == Java。当然了,本质上,Spring Boot可以算是J2EE的一个流派,但青出于蓝。

另外,我就相同的问题,分别问通义千问和chatGPT,前者给出的方案不仅繁琐,而且有错误。这或许不是模型的问题,而是模型训练的材料有问题。也就是说,也许中文世界中,编程问题的答案质量,与老外相比,不在一个档次内。

相关文章:

Spring Boot项目使用多线程执行定时任务

我在一个Spring Boot项目中,采用定时器执行一些操作,比如10秒就发送一次数据。这些操作有2个,如下所示。我就想,虽然这两个操作各自指定了时间频率,但如果其中一个操作非常耗时,会不会影响其他操作呢&#…...

【安装JDK和Android SDK】

安装JDK和Android SDK 1 前言2 下载2.1 下载途径2.2 JDK下载和安装2.2.1 下载2.2.2 安装并配置环境变量2.2.3 验证 2.3 SDK下载和安装2.3.1 下载2.3.2 安装2.3.3 环境变量配置2.3.4 验证 1 前言 在软件开发中,Android应用开发通常使用Android Studio,但…...

汇总10个AI免费一键生成PPT的网站

一、前言 PPT幻灯片是现代办公和学习中的重要组成部分。它在工作、研究或培训中扮演着重要角色,并能够让观众更好地理解信息。随着当今人工智能技术的快速发展,现在有很多免费的AI PPT生成器可供选择,帮助用户更加便捷地制作出高效且具有较强…...

超材料光子晶体和禁带分析实例_CST电磁仿真教程

光子晶体是由周期性排列的不同折射率的介质制造的光学结构,可被视为广义超材料metamaterial的一种。本期我们演示设计一个基于光频能带(PBG,photonics band gap) 的二维光子晶体波导,能带分析方法也可适用于微波波段(EBG,electromagetic band…...

关于OceanBase数据库的poc测试连接经验(by liuhui)

poc客户给了OceanBase数据库实例如下 ob实例: ip:1xx.xx.xx 端口:2883 实例名:obm_xczjj_1_poc#cs_pool_1 用户名:root 密码:xxxxxx 问题出现:根据客户提供的OceanBase数据库配置报错。配置如下 查询数据…...

Docker部署如何修改本地mysql,redis连接信息

要修改数据库 MySQL 和缓存 Redis 的地址为 ruoyi-mysql 和 ruoyi-redis,通常需要在 Spring Boot 项目的配置文件中进行相应的修改。 ### 修改 MySQL 数据库地址为 ruoyi-mysql 1. **在 Spring Boot 项目中找到 application.properties 或 application.yml 文件**…...

PHP中的ReflectionClass常见用法

ReflectionClass是 PHP 中的一个类,它提供了有关类的信息的反射。 使用ReflectionClass可以在运行时获取关于类的各种信息,例如类的名称、方法、属性、注释等。 以下是一些常见的用法: 获取类的名称: $reflection new Reflec…...

processing像素画教程

前提:各位已经安装了processing 第一步:创建一个简单的网格 我们首先创建一个网格来定义我们作品的像素画布。网格将帮助您在适当的位置绘制每个像素。 int gridSize 20; // 每个像素的大小 int cols, rows; void setup() {size(400, 400); // 设置画…...

【秋招笔试】10.13字节跳动(已改编)秋招-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的三题全部上线…...

牛客网上最全的Java八股文整理,涵盖Java全栈技术点

Java 面试 “金九银十”这个字眼对于程序员应该是再熟悉不过的了,每年的金九银十都会有很多程序员找工作、跳槽等一系列的安排。说实话,面试中 7 分靠能力,3 分靠技能;在刚开始的时候介绍项目都是技能中的重中之重,它…...

Skyeye 云智能制造 v3.14.9 发布,ERP 商城 + AI

Skyeye 云智能制造,采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…...

Element-快速入门

什么是 Element 在现代前端开发中,组件化的思想日益盛行,Element组件库作为一款流行的UI组件库,特别适用于基于Vue.js的项目,它为开发者提供了丰富的组件和良好的开发体验。 想要使用Element的组件库,我们需要完成下面…...

利士策分享,从“亮剑精神”汲取财富智慧

利士策分享,从“亮剑精神”汲取财富智慧 在某一广袤区域内,一场寓意深远的活动正如火如荼地展开,它不仅象征着直面挑战的勇气,更隐含着经济社会发展的深层启示。 对于广大民众来说,这场活动背后所传达的理念与机遇&am…...

【JavaScript】关于使用JS对word文档实现预览的一些思考

文章目录 mammothdocx4js mammoth 官网地址&#xff1a;https://github.com/mwilliamson/mammoth.js#readme 安装mammoth&#xff1a; npm i mammoth -S我们可以安装mammoth来实现上传的word文件的在线预览&#xff0c;我们以element的上传组件为示例&#xff1a; <temp…...

安宝特方案 | AR技术在轨交行业的应用优势

随着轨道交通行业不断向智能化和数字化转型&#xff0c;传统巡检方式的局限性日益凸显。而安宝特AR眼镜以其独特的佩戴方式和轻便设计&#xff0c;为轨道交通巡检领域注入了创新活力&#xff0c;提供了全新的解决方案。 01 多样化佩戴方法&#xff0c;完美适应户外环境 安宝特…...

K8S配置MySQL主从自动水平扩展

前提环境 操作系统Ubuntu 22.04 K8S 1.28.2集群&#xff08;1个master2个node&#xff09; MySQL 5.7.44部署在K8S的主从集群 metrics-server v0.6.4 概念简介 在K8s中扩缩容分为两种 ●Node层面&#xff1a;对K8s物理节点扩容和缩容&#xff0c;根据业务规模实现物理节点自动扩…...

Excel:将一列拆分成多列

实现的效果是&#xff1a; 操作步骤如下&#xff1a; 1.选中列 → 点击菜单栏中的"数据" → 分列 2.选择"分列符号"&#xff0c;点击下一步 3.我想要按照空格分列&#xff0c;就选择空格 4.点击完成&#xff0c;就可以实现分列的效果了...

一款强大灵活的流程图引擎,支持React 和 Svelte 框架

大家好&#xff0c;今天给大家分享一个专注于处理流程可视化和交互的项目xyflow。它旨在为开发者和用户提供一种直观、高效的方式来表示、管理和操作各种流程。 项目介绍 xyflow是一款强大灵活的流程图引擎。该项目是用于构建基于节点的编辑器和交互式图表&#xff0c;支持 Re…...

基于STM32 ARM+FPGA+AD的电能质量分析仪方案设计(一)硬件设计

电能质量分析系统硬件设计 3.1 电能质量分析系统设计要求 本系统实现对电能质量的高精度测量&#xff0c;根据国家相关电能质量分析仪器规定 标准以及对市场电能质量分析仪的分析&#xff0c;指定以下设计目标。 &#xff08; 1 &#xff09;电能质量参数测量精度&#xf…...

LLM - 配置 ModelScope SWIFT 测试 Qwen2-VL 视频微调(LoRA) 教程(3)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142882496 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 SWIFT …...

换背景颜色怎么操作?5分钟掌握证件照、商品图换底色的完整指南

最近有不少朋友问我&#xff0c;证件照背景太丑怎么办&#xff1f;电商产品图背景杂乱怎么处理&#xff1f;其实换背景颜色没有想象中那么复杂&#xff0c;今天就把我用过的所有方法和工具整理出来&#xff0c;帮你彻底解决这个问题。为什么要学会换背景颜色先说说我为什么突然…...

上海国际航运研究中心:全球绿色航运发展报告(2024-2025)

本报告由上海国际航运研究中心与世界海事大学联合编制&#xff0c;聚焦 2024 年 1 月至 2025 年 9 月全球绿色航运发展&#xff0c;围绕政策、机制、清洁能源、减排技术、发展趋势五大核心展开&#xff0c;全面呈现航运业低碳转型的全球格局、关键进展与挑战。一、核心政策&…...

BQ34Z100-G1电量计配置不求人:用咸鱼EV2400+BqStudio完成电池组参数学习的保姆级教程

BQ34Z100-G1电量计配置实战&#xff1a;从零搭建高精度电池管理系统 在新能源和储能系统蓬勃发展的今天&#xff0c;精确的电池电量计量已成为电池管理系统(BMS)的核心竞争力。德州仪器(TI)的BQ34Z100-G1阻抗跟踪电量计凭借其出色的精度和稳定性&#xff0c;在工业储能、电动工…...

杰理之似于“PO”声,如果切换的时机刚好在音量较高的时候,比较容易出现【篇】

似于“PO”声&#xff0c;如果切换的时机刚好在音量较高的时候&#xff0c;比较容易出现...

终极指南:三分钟掌握全网盘高速下载神器LinkSwift

终极指南&#xff1a;三分钟掌握全网盘高速下载神器LinkSwift 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘…...

Barlow字体完全指南:如何用这款开源字体提升设计质感

Barlow字体完全指南&#xff1a;如何用这款开源字体提升设计质感 【免费下载链接】barlow Barlow: a straight-sided sans-serif superfamily 项目地址: https://gitcode.com/gh_mirrors/ba/barlow 想要为你的设计项目寻找一款既现代又实用的免费字体吗&#xff1f;Barl…...

MoneyPrinterTurbo终极指南:5步实现AI短视频自动化创作

MoneyPrinterTurbo终极指南&#xff1a;5步实现AI短视频自动化创作 【免费下载链接】MoneyPrinterTurbo 利用AI大模型&#xff0c;一键生成高清短视频 Generate short videos with one click using AI LLM. 项目地址: https://gitcode.com/GitHub_Trending/mo/MoneyPrinterTu…...

AI IDE CLI:为AI编程助手打造的轻量级本地开发环境

1. 项目概述&#xff1a;一个为AI时代量身定制的本地开发环境CLI工具如果你是一名开发者&#xff0c;最近肯定没少和各类AI编程助手打交道。无论是GitHub Copilot、Cursor&#xff0c;还是各种本地部署的大模型&#xff0c;它们正在深刻地改变我们写代码的方式。但随之而来的一…...

低空经济公司官网与宣传材料常见的5个问题:为什么看起来先进却不够可信

在B2B企业的品牌升级和内容分发中&#xff0c;“低空经济公司官网与宣传材料常见的5个问题&#xff1a;为什么看起来先进却不够可信”不是一个单点问题&#xff0c;而是关系到客户理解效率、销售推进效率和品牌长期信任感的系统问题。低空经济企业在表达上最容易走向一个误区&a…...

基于BMapGL与MapVGL,实战城市人流热力图可视化

1. 从零开始搭建热力图开发环境 第一次接触百度地图GL版开发时&#xff0c;我也被各种配置搞得晕头转向。现在把完整的环境搭建流程梳理出来&#xff0c;帮你避开我踩过的那些坑。BMapGL作为百度地图的WebGL版本&#xff0c;相比传统API渲染效率提升明显&#xff0c;特别适合数…...