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

@Async正确使用姿势

@Async注解可以使被修饰的方法成为异步方法,简单且方便,这篇文章将教你如何正确的使用它


 先谈谈大多数人对@Aysnc的认识:        

        如果直接使用@Async,未指定线程池 并且 容器内也没有beanName为taskExecutor的bean,则会使用org.springframework.core.task.SimpleAsyncTaskExecutor
        注:这个默认的线程池挺坑的,spring官方也不推荐使用


到了springboot2.1.X时代,一切都变了,新增了一个 TaskExecutionAutoConfiguration,他的出现让你可以摆脱SimpleAsyncTaskExecutor带来的苦楚

当然只是一定程度上~~~

先贴个代码:

红框中的是springboot默认给的配置,核心8个,无界队列等等参数,相比SimpleAsyncTaskExecutor还是香了很多不是嘛~~~

那是否可以说:springboot2.1.X就可以直接使用@Async,反正不是SimpleAsyncTaskExecutor了

这句话是不全对的,有场景限制:

        你看看这里还“藏着”一个ConditionalOnMissingBean,表明只要在容器中有Executor这类型得bean,就不会再去注册它

例如:如下代码在项目中手动定义了一个Executor类型的bean并注入到容器中

问题1:

        那是不是只要容器中有自定义的Executor类型得bean,那@Async就又会使用SimpleAsyncTaskExecutor了呢?

并不是,再看一下代码:

这里会去容器中取,如果取不到或者取到了多个会异常,则返回null,那最终使用的就是SimpleAsyncTaskExecutor了


这里回复下问题1:

        如果容器中有Executor类型的bean,那么springboot就不会给我们往容器中注册默认Executor类型bean,这时直接使用@Async和@Async("线程池bean名")是使用的同一个线程池

那问题来了,如果我自定义多个Executor类型得bean并且都注册到容器中,会发生什么呢?

那就会打印一段描述信息,给与我们一些提示:

        More than one TaskExecutor bean found within the context, and none is namedu'taskExecutor'. Mark one of them as primary or name it 'taskExecutor' (possibly " +"as an alias) in order to use it for async processing: " + exgetBeanNamesFound()

这里表明,容器内必须得有一个beanName为 taskExecutor的线程池,否则那就回到最初的起点使用:SimpleAsyncTaskExecutor


总结一下上述:

前提:使用的springboot2.1.X及以上版本

        1. 项目没有自定义Executor注册到容器,那么@Async使用的是springboot默认配置的ThreadPoolTaskExecutor

        2. 项目如果有自定义Executor且只自定义了一个,那么@Async则默认使用的就是它

        3. 项目中自定义了多个Executor,且没有一个beanName为taskExecutor,那么则会使用SimpleAsyncTaskExecut

相关文章:

@Async正确使用姿势

Async注解可以使被修饰的方法成为异步方法,简单且方便,这篇文章将教你如何正确的使用它 先谈谈大多数人对Aysnc的认识: 如果直接使用Async,未指定线程池 并且 容器内也没有beanName为taskExecutor的bean,则会使…...

试除法判定质数算法总结

知识概览 质数的定义 在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数。 质数的判定——试除法 暴力算法 时间复杂度 改进算法 时间复杂度 暴力算法:时间复杂度O(n) 算法模版 bool is_pr…...

vuetify 回到顶部

参考链接 // 回到id#app-content-container 的dom节点顶部 onScroll() {const ele document.querySelector(#app-content-container)// this.$vuetify.goTo(0, duration)this.$vuetify.goTo(#app-content-container, { container: ele })},...

Socket与TCP的关系

前言 相信大家对于TCP已经非常熟悉了,学习过计算机网络的同学对于它的连接和断开流程应该已经烂熟于心了吧。 那么Socket是什么? Socket是应用层与TCP/IP协议簇通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是…...

RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡

先决条件# Kubernetes 集群 参考RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客CLI 工具Ingress Controller(仅适用于托管 Kubernetes) 创建集群k8s [rootnginx locale]# cat rancher-cluster.yml nodes:- …...

使用爬虫爬取热门电影

文章目录 网站存储视频的原理M3U8文件解读网站分析代码实现 网站存储视频的原理 首先我们来了解一下网站存储视频的原理。 一般情况下&#xff0c;一个网页里想要显示出一个视频资源&#xff0c;必须有一个<video>标签&#xff0c; <video src"xxx.mp4"&…...

【unity小技巧】实现没有动画的FPS武器摇摆和摆动效果

文章目录 前言开始完结 前言 添加程序摇摆和摆动是为任何FPS游戏添加一些细节的非常简单的方法。但是并不是所以的模型动画都会配有武器摆动动画效果&#xff0c;在本文中&#xff0c;将实现如何使用一些简单的代码实现武器摇摆和摆动效果&#xff0c;这比设置动画来尝试实现类…...

C语言基础知识(6):UDP网络编程

UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下&#xff0c;虽然可以确保发送消息的大小&#xff0c;却不能保证消息一定会到达。因此&#xff0c;应用有时会根据自己的需要进行重发处理。 1.UDP协议的主要特点&#xff1a; &#xf…...

12月笔记

#pragma once 防止多次引用头文件&#xff0c;保证同一个&#xff08;物理意义上&#xff09;文件被多次包含&#xff0c;内容相同的两个文件同样会被包含。 头文件.h与无.h的文件&#xff1a; iostream是C的头文件&#xff0c;iostream.h是C的头文件&#xff0c;即标准的C头文…...

三、C语言中的分支与循环—for循环 (6)

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…...

tolist()读取Excel列数据,(Excel列数据去重后,重新保存到新的Excel里)

从Excel列数据去重后&#xff0c;重新保存到新的Excel里 import pandas as pd# 读取Excel文件 file r"D:\\pythonXangmu\\quchong\\quchong.xlsx" # 使用原始字符串以避免转义字符 df pd.read_excel(file, sheet_namenameSheet)# 删除重复值 df2 df.drop_duplica…...

ChatGPT大升级,文档图像识别领域迎来技术革新

​写在前面ChatGPT迎来重大升级冲击与机遇并存​大模型时代的思考与探索■ 像素级OCR统一模型- UPOCR■ OCR大一统模型- SPTS v3■ 文档识别分析LLM应用 写在最后问卷抽奖 ​写在前面 2023 年 12 月 31 日第十九届中国图象图形学学会青年科学家会议在广州召开&#xff0c;该会…...

2023年全国职业院校技能大赛软件测试—测试报告模板参考文档

ERP(资源协同)管理平台测试报告 目录 ERP(资源协同)管理平台测试报告 1. 概述...

【BCC动态跟踪PostgreSQL】

BPF Compiler Collection (BCC)是基于eBPF的Linux内核分析、跟踪、网络监控工具。其源码存放于GitCode - 开发者的代码家园 想要监控PostgreSQL数据库的相关SQL需要在编译PostgreSQL的时候开启dtrace。下文主要介绍几个和PostgreSQL相关的工具,其他工具可根据需求自行了解。 …...

汽车架构解析:python cantools库快速解析arxml

文章目录 前言一、安装cantools二、官方说明文档三、cantools方法1、解析message的属性2、解析pdu中的signals3、根据message查找signals4、报文组成bytes 四、总结 前言 曾经有拿cantools来解析过dbc&#xff0c;用得比较浅&#xff0c;不知道可以用来解析arxml。最近有个需求…...

Vue 之 修饰符汇总

一、简介 在Vue中&#xff0c;修饰符是一种特殊的语法&#xff0c;用于修改指令或事件绑定的行为&#xff0c;它们以点号&#xff08;.&#xff09;的形式添加到指令或事件的后面&#xff0c;并可以改变其默认行为或添加额外的功能&#xff0c;如&#xff1a;禁止事件冒泡、数…...

如何通过内网穿透实现无公网IP远程访问内网的Linux宝塔面板

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…...

综合跨平台全端ui自动化测试框架Airtest——AirtestIDE录制微信小程序脚本教学

前言 有在自动化测试领域的小伙伴应该都知道&#xff0c;app和小程序自动化这一类的自动化测试在实际操作中有时候很棘手让人心烦&#xff0c;动不动就是用appium写代码脚本维护什么的&#xff0c;不仅步骤繁琐&#xff0c;环境配置方面也是繁琐无比&#xff0c;动不动就与客户…...

如何在ArcGIS Pro中指定坐标系

在进行制图的时候&#xff0c;为了实现某些特定的效果&#xff0c;需要指定特定的坐标系&#xff0c;但是现有的数据可能不是所需要的坐标系&#xff0c;这时候就需要对现有的数据坐标系进行处理&#xff0c;这里为大家介绍一下ArcGIS Pro中指定坐标系的方法&#xff0c;希望能…...

macOS 老版本系统恢复中出现“MacBook Pro无法与恢复服务器取得联系”

macOS 老版本系统恢复中出现“MacBook Pro无法与恢复服务器取得联系” 网络问题系统时间问题镜像索引问题 网络问题 系统时间问题 镜像索引问题 恢复模式的 “实用工具 > 系统终端” 里执行如下 nvram IASUCatalogURLhttps://swscan.apple.com/content/catalogs/others/i…...

OBS Multi RTMP插件:终极多平台直播同步解决方案

OBS Multi RTMP插件&#xff1a;终极多平台直播同步解决方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在当今的多平台直播时代&#xff0c;内容创作者面临着同时向多个平台推送直…...

低功耗单板计算机在远程传感中的设计与优化

1. 低功耗单板计算机的远程传感革命在阿拉斯加的输油管道监控站里&#xff0c;一台体积仅相当于信用卡大小的计算机已经连续工作三年&#xff0c;仅靠两节锂电池和一块巴掌大的太阳能板维持运转。这个真实案例展示了低功耗单板计算机(SBC)在极端环境下的惊人潜力。不同于传统工…...

PKSM终极指南:从菜鸟到宝可梦存档管理大师的完整路径

PKSM终极指南&#xff1a;从菜鸟到宝可梦存档管理大师的完整路径 【免费下载链接】PKSM Gen I to GenVIII save manager. 项目地址: https://gitcode.com/gh_mirrors/pk/PKSM 你是否曾经因为游戏存档意外丢失而痛心疾首&#xff1f;或者想要将第一世代的宝可梦带到第八世…...

Windows热键侦探:快速定位占用快捷键的终极解决方案

Windows热键侦探&#xff1a;快速定位占用快捷键的终极解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经…...

终极指南:如何用AnyKernel3一键创建完美Android内核刷机包

终极指南&#xff1a;如何用AnyKernel3一键创建完美Android内核刷机包 【免费下载链接】AnyKernel3 AnyKernel, Evolved 项目地址: https://gitcode.com/gh_mirrors/an/AnyKernel3 想要为你的Android设备制作内核刷机包&#xff0c;却总是被复杂的设备兼容性搞得焦头烂额…...

基于MCP协议构建AI助手与开发环境的安全桥梁:Merx MCP实战指南

1. 项目概述&#xff1a;一个为开发者服务的“智能副驾”最近在折腾一个内部工具链的自动化项目&#xff0c;发现很多重复性的查询、数据转换和文档生成工作&#xff0c;虽然能写脚本解决&#xff0c;但每次都要翻找不同的API文档和命令行工具&#xff0c;效率很低。就在这个当…...

【独家首发】Midjourney官方未公开的配额继承规则:家庭共享、账号迁移、停用恢复的3个灰色地带

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney订阅计划选择指南 选择合适的 Midjourney 订阅计划是高效使用其图像生成服务的关键起点。不同计划在生成速度、并发任务数、私有模式支持及高分辨率下载权限等方面存在显著差异&#xff0c;…...

LyricsX:macOS歌词同步的终极解决方案

LyricsX&#xff1a;macOS歌词同步的终极解决方案 【免费下载链接】LyricsX &#x1f3b6; Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX 还在为macOS上找不到好用的歌词应用而烦恼吗&#xff1f;LyricsX为你带来了一站式的智能…...

【研报442】美国汽车产业战略的需求研究:五大政策方向重塑美国汽车工业

本报告提供限时下载&#xff0c;请查看文后提示以下仅为报告部分内容&#xff1a;摘要&#xff1a;美国汽车产业全球竞争力持续下滑&#xff0c;产量份额、本土巨头市占率、经济贡献度均大幅落后&#xff0c;面对中国电动车强势扩张&#xff0c;亟需出台国家级战略。报告围绕降…...

10亿+蛋白质、3000万核苷酸,全球最大生物向量库

摘要 同源搜索在计算生物学中具有核心作用,可用于识别生物序列间的进化关系与功能相似性。然而,包括BLAST、Foldseek和MMseqs2在内的现有同源搜索方法,难以高效、精准地处理超大规模生物数据库。本研究提出高效检索增强搜索工具ERAST,可在迄今规模最大的向量数据库中处理约…...