spring Boot 中使用线程池异步执行多个定时任务

Spring Boot 合理使用 @Async 注解开启异步 Spring Boot 使用 @Async 注解 阅读详情

spring Boot 中使用线程池异步执行多个定时任务

在启动类中添加注解@EnableScheduling

第一步添加注解,这样才会使定时任务启动

配置自定义线程池

@Configuration
public class ScheduleConfiguration implements SchedulingConfigurer {

    @Value("${schedule.max-threads:20}")
    private int coreSize;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(this.getTaskScheduler());
    }

    private ThreadPoolTaskScheduler getTaskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(this.coreSize);
        taskScheduler.setThreadNamePrefix("schedule-pool-");
        taskScheduler.afterPropertiesSet();
        return taskScheduler;
    }

编写定时任务

 @Scheduled(cron = "0 0/30 * * * ? ")//定时任务的执行时间ian
 private void updateChapterHotValue() {
    //自己的定时任务业务逻辑
 }
怎么在Springboot启动的时候就启动一个永不停止的线程 可以通过实现CommandLineRunner接口或者使用@EventListener注解来实现。这两种方法都可以实现在Spring Boot启动时就启动一个永不停止的线程。可以根据自己的项目需求选择合适的方法。在线上环境监测一个线程是否运行正常,通常需要结合日志记录、健康检查和性能监控等多种方法。● 确保线程安全:由于线程是在后台运行的,需要确保访问共享资源时的线程安全性。● 异常处理:合理处理线程中的异常,避免因异常而导致线程意外终止。● 资源管理:长时间运行的线程可能会占用系统资源,需要妥善管理。 阅读详情

相关推荐

Spring Boot实现定时任务调度

在业务系统中,定时任务是非常常见的需求,例如定时对订单状态进行更新、定时生成销售报表、自动化库存管理等。Spring Boot 提供了非常方便的定时任务调度功能,并且结合线程池技术,我们可以高效地执行多个定时任务,保证系统的扩展性和高可用性。本文将深入探讨如何使用 Spring Boot 实现定时任务调度,特别是结合线程池技术,确保多个任务能够并发安全地执行。此外,我们还将展示如何利用 cron 表达式灵活定义定时任务的触发时间,提供详细的示例以及电商交易系统中的实际应用。

J老熊 1642

SpringBoot的定时任务

一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。 三、基于注解设定多线程定时任务 一、静态:基于注解 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。 1、创建定时器 使用SpringBoot基于注解来创建定时任务非常简单,只需几行代码便可完成。 代码如下: @Configurati

yep12345的博客 318

【Spring Boot 3】异步线程任务

本文介绍开发Spring Boot应用实现异步线程任务的方法及步骤。Spring Boot使用注解开启对异步线程的支持,使用@Async注解标注异步任务,@Async注解在类上,则该类中所有方法都是异步线程执行,需要注意使用@Async注解的类对象必须是Spring上下文管理的Bean实例;注解在方法上,只有标注注解的方法是异步线程执行。Spring异步任务的原理是通过Spring AOP动态代理实现的,Spring容器初始化Bean实例时会扫描@Async。

又言又语 1465

springboot 快速启动(八)——整合多线程开启异步任务

一、定义线程池和开启异步可用 Spring中存在一个接口AsyncConfigurer接口,该接口就是用来配置异步线程池的接口,它有两个方法,getAsyncExecutor和getAsyncUncaughtExceptionHandler,第一个方法是获取一个线程池,第二个方法是用来处理异步线程中发生的异常。它的源码如下所示: package org.springframework.schedu...

博渊的博客 2246

Spring Boot的异步与定时任务!

🏆 本文精选收录于《滚雪球学SpringBoot》专栏,专为零基础学习者量身打造。从Spring基础到项目实战,手把手带你掌握核心技术,助力你快速提升,迈向职场巅峰,开启财富自由之路🚀!无论你是刚入门的小白,还是已有基础的开发者,都能在这里找到适合自己的学习路径!    🌟 关注、收藏、订阅,持续更新中!和我们一起高速成长,突破自我!💡

**My Coding Family** 1463

生成式引擎优化(GEO)- 搜索引擎优化

生成式引擎优化(GEO)是针对AI内容生成平台(如ChatGPT)的新型优化策略,旨在提升品牌内容在AI生成答案中的引用率,与传统SEO存在显著差异。GEO通过优化内容权威性、结构化和语义关联,适应AI的RAG技术架构,采用3C原则(可爬性、网络共识、反馈校正)提升内容可见性。其核心区别在于目标(引用率vs排名)、技术(语义优化vs关键词)及算法透明度(封闭vs开放)。适用场景包括商业决策、行业权威建设及公共知识服务,帮助品牌在AI时代占据信息主导权。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1399

SpringBoot开启异步多线程

SpringBoot 的异步多线程需要从 java 的多线程基础说起,可以参考java 多线程实现的三种方式区别。SpringBoot 在此基础上进行了多次封装,所以使用起来非常方便。

清泉影月 6349

NXP S32K1 SPI驱动实战:从配置到DMA传输的完整流程解析

本文深入解析了NXP S32K1系列MCU的SPI驱动开发全流程。基于S32 Design Studio环境,详细阐述了从引脚配置、LPSPI模块初始化,到实现阻塞、中断及DMA三种传输模式的实战代码与配置要点。文章重点剖析了DMA传输的配置细节与性能优化,旨在帮助开发者构建高效、稳定的嵌入式SPI通信,并提供了SPI Flash驱动的综合案例。

blue42的博客 713

只需三步!SpringBoot启动异步线程执行任务

1.在Application启动类上加@EnableAsync注解 @SpringBootApplication @EnableAsync public class SelectionApplication { public static void main(String[] args) { SpringApplication.run(SelectionApplicatio...

guyu96的博客 9618

【文章阅读+代码复现】Point-GNN

Brief 在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,这一篇文章是研究了图卷积在3D检测的中的用法。来自卡内基梅隆大学。已经被CVPR2020接收. 这里是 paper 这里是 code Abstruct 一个采用GNN设计的3D目标检测框架 过程是先将点云场景编码成图结构,随后设计了一个叫point-GNN的网络结构,在...

有所为,有所成长 1万+

uniapp - 解决 uni.chooseImage 在苹果 IOS 真机上点击没反应的问题,苹果手机点击 uni.chooseImage方法不生效,也不报任何错误(解决苹果ios系统点击无效问题)

uniapp小程序h5网页苹果ios系统点击uni.chooseImage不执行点击无效,uniapp使用uni.chooseImage方法点击没反应怎么办,uniappuni.chooseImage在ios苹果手机运行点击不触发,uniappuni.chooseImage苹果ios系统点击无效,uniapp项目ios端云打包之后uni.chooseImage不生效了,uniapp打包之后uni.chooseImage()无法打开相机,uniapp苹果手机无法打开相机和相册,uniapp网页h5微信支

🏆 前端领域优质创作者 1万+

记录Java定时器并发执行

Java定时器并发执行

weixin_43385566的博客 1227

微信小程序 - 真机调试请求异常 Provisional headers are shown,微信小程序开发者工具调试没问题就真机测试时出现请求报错(微信小程序请求接口提示Provisional h)

微信小程序开发 Request Headers: Provisional headers are shown,微信开发工具请求正常,真机调试和上线之后出现 Provisional headers are shown,微信小程序开发工具调试没问题,真机调试Provisional headers are shown,在开发工具调试,请求正常没问题,使用真机调试,请求异常,微信小程序真机调试时后台是本地服务器,显示“Provisional headers are shown”问题解决,微信小程序websocket

🏆 前端领域优质创作者 1万+

复盘Spring中定时任务和异步线程池

​ 项目中最近使用了多个定时任务处理业务需求,于是在实现业务逻辑过程中,产生了上图一些思考和疑问,现在利用空余时间进行一次复盘。 项目搭建 项目搭建环境:JDK1.8+SpringBoot 主启动类:加上@EnableScheduling 新建定时任务配置类:ScheduledTask;定义两个定时任务,简单打印一下线程名字和时间戳 源码如下: @Component public class ScheduledTask { @Scheduled(cron = "0/1 * * * * ?")

增量星球 2095

Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖)

API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+!

yueyeguzhuo的专栏 270

ANSYS Fluent:湍流模型理论与应用

雷诺平均方程(RANS,Reynolds-Averaged Navier-Stokes equations)是湍流建模中最常用的方法。它通过将Navier-Stokes方程中的瞬时速度分解为平均速度和脉动速度,然后对这些方程进行时间平均,从而简化了湍流的计算。RANS方法的关键在于湍流闭合问题的解决,即如何准确地表示脉动速度的统计量。雷诺应力模型(RSM)是一种更高级的湍流模型,它通过求解六个雷诺应力方程来描述湍流的各向异性。RSM模型能够更准确地预测复杂的湍流流动,如旋转流和分离流,但计算成本较高。

kkchenjj的博客 2946

Spring Boot中配置定时任务、线程池与多线程池执行的方法

这篇文章主要给大家介绍了关于Spring Boot中配置定时任务、线程池与多线程池执行的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 配置基础的定时任务 最基本的配置方法,而且这样配置定时任务是单线程串行执行的,也就是说每次只能有一个定时任务可以执行,可以试着声明两个方法,在方法内写一个死循环,会发现一直...

sssspider的博客 6325

【毕设保姆级指南】基于YOLOv8的DAGM 2007工业缺陷检测系统从搭建到落地

本教程基于YOLOv8算法实现DAGM 2007工业缺陷检测系统,包含数据处理、模型训练和可视化界面开发全流程。首先对DAGM数据集进行格式转换和划分,然后通过YOLOv8训练工业缺陷检测模型,最终构建PyQt5交互界面实现缺陷可视化检测。该系统可用于智能制造中的产品质量控制,帮助快速定位工业产品缺陷,提升检测效率和准确性,为工业质检提供高效解决方案。

LXY_LOVE36的博客 182

Spring多定时任务@Scheduled执行阻塞问题

一. 问题描述   最近项目中发现一个问题,计划每日凌晨4:40执行一个定时任务,使用注解方式: @Scheduled(cron = “0 40 4 * * ?”),cron表达式明显没有问题,但是这个定时任务总是不按时执行,有时候得等到8点多,有时候9点多才执行。后来查了下,原来这种定时方式默认是单线程执行的,恰好我这里有多个定时任务,并且其中有个在4:40之前的定时任务比较耗时,导致4:40的...

Edward Lee的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

spring Boot 线程池异步执行多个定时任务

1、自定义线性池 package com.sky.webpro.task; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework...

bingo 1486

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

spring boot @Scheduled定时任务线程池配置类

@Scheduled 这个注解给我们带了很大的方便,我们只要加上该注解,并且根据需求设置好就可以使用定时任务了。 但是,我们需要注意的是,@Scheduled 并不一定一定会按时执行。 因为使用@Scheduled 的定时任务虽然是异步执行的,但是,不同的定时任务之间并不是并行的!!!!!!!! 在其中一个定时任务没有执行完之前,其他的定时任务即使是到了执行时间,也是不会执行的,它们会进行排队。 也就是如果你想你不同的定时任务互不影响,到时间就会执行,那么你最好将你的定时任务方法自己搞成异步方法,

旅人的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spring Boot中异步线程池@Async

自定义线程池,可对系统中线程池更加细粒度的控制,方便调整线程池大小配置,线程执行异常控制和处理。在设置系统自定义线程池代替默认线程池时,虽可通过多种模式设置,但替换默认线程池最终产生的线程池有且只能设置一个(不能设置多个类继承 AsyncConfigurer)。重新实现接口 AsyncConfigurer;继承 AsyncConfigurerSupport;配置由自定义的 TaskExecutor 替代内置的任务执行器。

运气只是当机会来临时,你已为它准备好。 2582

复盘 Spring boot 中定时任务如何启用异步线程池

局部线程池实际上就是指异步方法上需要指定使用该线程池,否则将使用默认线程池。配置异步线程池源码如下:@Component/*** 重写AsyncTaskExecutor对象,实现全局异步线程,即@Async注解需指定线程池*//*线程池对拒绝任务的处理策略(rejection policy):当线程池已经达到最大线程数量,没有空闲线程时,新任务该如何处理可选策略:CallerRunsPolicy:当线程池没有能力处理时直接在执行方法的调用线程中运行被拒绝的任务。

2401_84046912的博客 1147

Spring Boot 定时任务以及异步任务的实现

在 Spring Boot 中,实现异步任务非常简单,主要通过 @Async 注解和 TaskExecutor 接口来实现。异步任务适用于需要并发执行的场景,例如发送邮件、处理文件、调用外部 API 等。在 Spring Boot 中,实现定时任务非常简单,主要通过 @Scheduled 注解和 TaskScheduler 接口来实现。使用 @Async 注解创建异步任务。处理异步任务的返回值。

qq_33807380的博客 1206

Spring Boot 使用Spring的异步线程池

前言 线程池,从名字上来看,就是一个保存线程的"池子",凡事都有其道理,那线程池的好处在哪里呢? 我们要让计算机为我们干一些活,其实都是在使用线程,使用方法就是new一个Runnable接口或者新建一个子类,继承于Thread类,这就会涉及到线程对象的创建与销毁,这两个操作无疑是耗费我们系统处理器资源的,那如何解决这个问题呢? 线程池其实就是为了解决这个问题而生的。 线程池提供了处理系统性能和大用...

阳光大男孩!!!的博客 1471

在Spring Boot中使用@Async异步任务的线程池

既然有了@Async,我们还需要使用他提供的线程池? 虽然使用`@Async`注解允许方法异步执行,但它并不提供底层的线程池管理。默认情况下,Spring会使用一个简单的任务执行器来执行异步方法,这可能不是在所有场景下都是理想的。

好看的皮囊千篇一律,有趣的灵魂万里挑一。 2383
上一篇: centos 7.4 安装 nginx 配置ssl证书和反向代理
下一篇: Spring Boot 整合 Elastic-Job
Lei_lee_coder
博客等级 码龄8年 2粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值