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

springboot异步多线程的实现

1、配置线程池相关参数

package com.xxx.test.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;@Slf4j
@Configuration
@EnableAsync(proxyTargetClass = true)
public class AsyncConfig implements AsyncConfigurer {@Bean("asyncExecutor")public Executor asyncExecutor(){ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(3);executor.setMaxPoolSize(10);executor.setQueueCapacity(Integer.MAX_VALUE);executor.setThreadNamePrefix("common-async-");executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.initialize();return executor;}/*** 只能捕获无返回值的异步方法,有返回值的被主线程处理*/@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return new CustomAsyncExceptionHandler();}/**** 处理异步方法中未捕获的异常*/class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {@Overridepublic void handleUncaughtException(Throwable throwable, Method method, Object... obj) {log.info("Exception message - {}", throwable.getMessage());log.info("Method name - {}", method.getName());log.info("Parameter values - {}", Arrays.toString(obj));if (throwable instanceof Exception) {Exception exception = (Exception) throwable;log.info("exception:{}", exception.getMessage());}throwable.printStackTrace();}}}

2、编写异步服务

package com.xxx.xxx.service.impl;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;import java.util.concurrent.Future;@Slf4j
@Service
public class AsyncService {@Async("asyncExecutor")public void task1() throws Exception {log.info("task1开始执行");Thread.sleep(3000);log.info("task1执行结束");throw new RuntimeException("出现异常");}//todo 只能捕获无返回值的异步方法,有返回值的被主线程处理,还是要在主线程判断代码@Async("asyncExecutor")public Future<String> task2() throws Exception {log.info("task2开始执行");Thread.sleep(3000);log.info("task2执行结束");throw new RuntimeException("出现异常");// return new AsyncResult<String>("task2 success");}@Async("asyncExecutor")public Future<Integer> task3(Integer num) throws Exception {log.info("task3开始执行,num:{}", num);//Thread.sleep(3000);log.info("task3执行结束,num:{}", num);return new AsyncResult<Integer>(num);}@Async("asyncExecutor")public Future<String> task4() throws Exception {log.info("task4开始执行");Thread.sleep(3000);log.info("task4执行结束");return new AsyncResult<String>("task4 success");}}

3、controller层服务调用

 @RequestMapping(value = "/getTest", method = RequestMethod.GET)public BasicResult getTest(Integer num) throws Exception {BasicResult<String> basicResult = new BasicResult<>();log.info("{} 接受到请求:num={}", Thread.currentThread().getName(), num);//TimeUnit.HOURS.sleep(1);asyncService.task1();asyncService.task2();Future<Integer> integerFuture = asyncService.task3(num);basicResult.setSingleResult(integerFuture.get().toString());return basicResult;}

4、如果启用异步线程池,需要在启动类加上  @EnableAsync(proxyTargetClass = true) 注解

相关文章:

springboot异步多线程的实现

1、配置线程池相关参数 package com.xxx.test.config;import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation…...

测试相关基础概念与常见开发模型

目录 1. 什么是需求 1.1 需求的定义 1.2 为什么有需求?为什么需求对软件测试人员如此重要? 1.3 测试人员眼里的需求(重要) 1.4 如何深入了解需求 2. 测试用例 2.1 什么是测试用例 2.2 为什么有测试用例 3. 什么是BUG 3.1 BUG定义 3.2 如何描述一个BUG 3.3 如何定义bug的级别 …...

MySQL安装详细教程!!!

安装之前&#xff0c;先卸载你之前安装过的数据库程序&#xff0c;否则会造成端口号占用的情况。 1.首先下载MySQL:MySQL :: Download MySQL Community Server(下载路径) 2.下载版本不一样&#xff0c;安装方法略有不同&#xff1b;&#xff08;版本5的安装基本一致&#xff0c…...

前端下载文化部几种方法(excel,zip,html,markdown、图片等等)和导出 zip 压缩包

文章目录 1、location.href2、location.href3、a标签4、请求后端的方式5、文件下载的方式6、Blob和Base647、下载附件方法(excel,zip,html,markdown)8、封装下载函数9、导出 zip 压缩包相关方法(流方式) 总结 1、location.href //get请求 window.location.href url;2、locati…...

铠甲网络面试(部分)

如何用Redis实现分布式锁的&#xff1f;如果设置的超时时间到了&#xff0c;但占有锁的任务还未完成&#xff0c;怎么办&#xff1f;答案&#xff1a;定时任务进行检测与续约&#xff0c;具体参考 本博----《专题三分布式系统》之《第三章 集中式缓存Redis》之 《第三节 Redis底…...

elasticsearch 将时间类型为时间戳保存格式的时间字段格式化返回

dsl查询用法如下&#xff1a; GET /your_index/_search {"_source": {"includes": ["timestamp", // Include the timestamp field in the search results// Other fields you want to include],"excludes": []},"query": …...

淘宝商品列表怎么通过接口形式导出?

淘宝是目前国内最大的电商平台之一&#xff0c;拥有海量的商品资源。但是&#xff0c;有时候我们需要对淘宝商品进行批量操作&#xff0c;比如进行价格比较、数据分析等等。这时候&#xff0c;我们就需要将淘宝商品列表导出。那么&#xff0c;淘宝商品列表怎么导出呢?又可以按…...

TWS真无线蓝牙耳机哪家好?六款口碑好的TWS真无线蓝牙耳机分享

为了帮助大家在这个充满选择的世界中找到最理想的蓝牙耳机&#xff0c;我们特别为您精心挑选了几款备受赞誉的产品&#xff0c;它们在音质、舒适度、功能和性价比等方面都有出色的表现。在本文中&#xff0c;我们将深入探讨这些蓝牙耳机的特点和优势&#xff0c;帮助您更好地了…...

解决Win11右键菜单问题

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 程序日常 ✨特色专栏&…...

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好&#xff0c;我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本&#xff0c;来咨询我的小伙伴也越来越多&#xff0c;特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论&#xff0c;总结出安装部署Datahub最新版本的部署手…...

归并排序——“数据结构与算法”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容仍然是数据结构与算法专栏的排序呀&#xff0c;下面&#xff0c;让我们进入归并排序的世界吧&#xff01;&#xff01;&#xff01; 归并排序 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种…...

C语言笔试题训练【第一天】

目录 第一题 第二题 第三题 第四题 第五题 大家好&#xff0c;我是纪宁。 从今天开始博主会日更一些经典的C语言笔试题&#xff0c;持续20天左右。题目类型为5道选择题加2道编程题&#xff0c;希望能和大家一起进步。 第一题 1.读程序&#xff0c;下面程序正确的输出是&…...

计算语言模型计算每秒钟生成的token数量it/s

在 main() 函数的stream循环中&#xff0c;我们可以计算每秒钟生成的token数量&#xff0c;然后输出 it/s。在流式生成过程中&#xff0c;我们可以使用Python的time模块来计算速度。在测试时&#xff0c;生成速度会受到多个因素的影响&#xff0c;包括设备性能、模型大小、输入…...

Clickhouse调研

1、独立组件个数(按进程) 默认情况下是1个;如果需要使用副本机制,需要依赖zookeeper;如果需要监控功能,还得依赖第三方监控系统。 2、单机部署 很好的支持单机运行,并且单机情况下查询入库性能不错(通过其提供的示例数据进行体验)。 3、窗口函数 Clickhouse没有显示…...

02.Redis实现添加缓存功能

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis实现添加缓存功能 学习产出&#xff1a; 流程图 1. 准备pom环境 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId&g…...

【1.2】Java微服务:SpringCloud概论

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 微服务 ✨特色专栏&#xff1a; 知识分享 &#x…...

右键文件夹 ------- 打开 vscode的方法

1、右键vscode点击属性 2、这是地址栏&#xff0c;一会复制即可 3、新建一个txt文件,将这个复制进去 Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\*\shell\VSCode] "Open with Code" "Icon""D:\\Microsoft VS Code\\Code.exe"[HKE…...

小程序原生实现左右锚点联动

效果 wxml <view classbox><scroll-view scroll-y scroll-with-animation style"width:25%"><view classnav><view wx:for"{{navList}}" wx:keyindex class"title {{index active ?select:}}"data-index{{index}} bin…...

STM32 低功耗-睡眠模式

STM32 睡眠模式 文章目录 STM32 睡眠模式第1章 低功耗模式简介第2章 睡眠模式简介2.1 进入睡眠模式2.1 退出睡眠模式 第3章 睡眠模式代码示例总结 第1章 低功耗模式简介 在 STM32 的正常工作中&#xff0c;具有四种工作模式&#xff1a;运行、睡眠、停止和待机模式。 在系统或…...

IDEA用Gradle构建项目时,lombok插件无效的解决办法

Lombok 可用来帮助开发人员消除 Java 的重复代码&#xff0c;尤其是对于简单的 Java 对象&#xff08;POJO&#xff09;&#xff0c;比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File -> Settings ->…...

Local SDXL-Turbo实操手册:从键盘输入到画面生成的完整链路

Local SDXL-Turbo实操手册&#xff1a;从键盘输入到画面生成的完整链路 1. 什么是Local SDXL-Turbo&#xff1f; Local SDXL-Turbo是一个基于StabilityAI SDXL-Turbo构建的实时绘画工具。与传统的AI绘画工具需要等待几分钟生成不同&#xff0c;这个工具实现了真正的"打字…...

从零开始的大数据之路(6)- 三分钟安装部署好Datax

目录 datax的安装包&#xff1a; 从零开始的大数据之路 &#xff08;0&#xff09;的葵花宝典 -- 安装包分享 -- 错过就是罪过 [持续更新分享]-CSDN博客 1、上传datax安装包到服务器并分发到其他服务器 2、解压Datax 3、测试Datax 4、测试失败 datax报错解决 解决 再次…...

org.openpnp.vision.pipeline.stages.DetectLinesHough

文章目录org.openpnp.vision.pipeline.stages.DetectLinesHough功能参数例子测试图像generate_line_test_image.pycv-pipeline效果ENDorg.openpnp.vision.pipeline.stages.DetectLinesHough 功能 在图像中检测直线段 在DetectLinesHough之前&#xff0c;需要执行DetectEdgesC…...

设计元素精准匹配:提升设计落地质量与传播效率的实用指南

当前多数团队的设计流程中&#xff0c;元素调用无统一标准&#xff0c;同系列物料视觉偏差可达30%以上&#xff0c;不仅增加设计返工成本&#xff0c;也会削弱用户品牌认知&#xff0c;拉低传播转化效率。很多团队每年在设计资源上投入大量成本&#xff0c;最终物料的传播效果却…...

UniApp里用web-view预览PDF?小心这些性能坑和体验优化点

UniApp中WebView加载PDF的深度优化指南&#xff1a;从性能瓶颈到极致体验 在移动应用开发领域&#xff0c;PDF预览功能几乎是企业级应用的标配需求。UniApp作为跨平台开发框架&#xff0c;通过WebView实现PDF预览看似简单直接&#xff0c;但当项目进入生产环境&#xff0c;特别…...

如何解决SQL多表查询数据重复问题_使用DISTINCT与JOIN优化

...

Qwen3-Reranker-0.6B完整指南:支持多租户隔离的API网关集成方案

Qwen3-Reranker-0.6B完整指南&#xff1a;支持多租户隔离的API网关集成方案 1. 为什么你需要Qwen3-Reranker-0.6B 在构建现代搜索、推荐或RAG&#xff08;检索增强生成&#xff09;系统时&#xff0c;排序环节往往决定最终体验的上限。你可能已经部署了高效的向量检索服务&am…...

人工智能艺术新范式:忍者像素绘卷:天界画坊在AIGC领域的应用探索

人工智能艺术新范式&#xff1a;忍者像素绘卷&#xff1a;天界画坊在AIGC领域的应用探索 1. 像素艺术的新纪元 当传统像素艺术遇上人工智能&#xff0c;一场视觉革命正在悄然发生。忍者像素绘卷&#xff1a;天界画坊作为AIGC领域的新锐力量&#xff0c;正在重新定义像素艺术的…...

台达DVP PLC与三台变频器通讯程序详解:昆仑通态接线方式、设置指南及功能实现(频率设定、启...

台达DVP PLC与3台台达VFD-M变频器通讯程序 程序带注释&#xff0c;并附送昆仑通态有接线方式&#xff0c;设置。 器件&#xff1a;台达DVP ES系列的PLC&#xff0c;3台台达VFD M系列变频器&#xff0c;昆仑通态 功能&#xff1a;实现频率设定&#xff0c;启停控制&#xff0c;实…...

【粉丝福利社】从“找资料”到“资料找我”:OpenClaw如何让信息搜集效率翻倍?

&#x1f48e;【行业认证权威头衔】 ✔ 华为云天团核心成员&#xff1a;特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯&#xff1a;CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋&am…...