@Async注解的坑

问题描述

一个方法调用另一个方法(该方法使用@Async注解)在同一个类文件中,该注解会失效!

问题复现

TestAsyncController 类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/test")
public class TestAsyncController {private static final Logger logger = LoggerFactory.getLogger(TestAsyncController.class);@PostMapping("/test")public void test() {logger.info("测试异步开始...");try {test1();} catch (Exception e) {e.printStackTrace();}logger.info("测试异步结束...");}@Asyncpublic void test1(){for(int i=0;i<5;i++){logger.info("i={}",i);}}
}
问题测试结果

可以看出是全部使用的主线程

问题解决

将@Async注解的方法放在一个新的类文件中即可

TestAsyncService类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;@Service
public class TestAsyncService {private static final Logger logger = LoggerFactory.getLogger(TestAsyncService.class);@Asyncpublic void test1(){for(int i=0;i<5;i++){logger.info("i={}",i);}}
}
TestAsyncController类
import com.example.demo.service.TestAsyncService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/test")
public class TestAsyncController {private static final Logger logger = LoggerFactory.getLogger(TestAsyncController.class);@Autowiredprivate TestAsyncService asyncService;@PostMapping("/test")public void test() {logger.info("测试异步开始...");try {asyncService.test1();} catch (Exception e) {e.printStackTrace();}logger.info("测试异步结束...");}
}

测试结果

可以看出@Async注解开启新的子线程

问题原因需要各位大佬们帮忙解答!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL时间类型注意事项

MySQL常见的时间类型有YEAR、DATE、TIME、DATETIME、TIMESTAMP&#xff0c;绝大多数业务都是精确到秒的&#xff0c;所以通常用后两种。并且MySQL5.6以后后两种支持精度到毫秒&#xff08;最多小数点后6位&#xff09; DATETIME占8字节&#xff0c;不论要不要毫秒 TIMESTAMP占4…

【MySQL】存储过程与函数

一、存储过程 1、什么是存储过程 它是一组经过预先编译的SQL的封装它被存储在MySQL服务器上&#xff0c;当需要执行它时&#xff0c;客户端只需要向服务器发出调用命令&#xff0c;就可以把这一系列预先存储好的SQL语句全部执行 2、存储过程的优缺点 优点 简化操作&#xf…

密钥安全存储方案探讨与实践

随着信息技术的迅猛发展和应用范围的不断扩大&#xff0c;我们日常生活中的许多方面已经与信息技术密不可分。而在信息安全领域中&#xff0c;密钥的安全存储显得尤为重要。本文将探讨密钥安全存储的必要性、相关技术和实践方案&#xff0c;并提出一些解决方案。 一、密钥安全存…

IDEA 部署服务到 Docker 容器

第一步&#xff0c;配置Docker启用远程tcp端口&#xff0c;并重新启动 假设已经安装了Docker&#xff0c;编辑Docker启动服务脚本 [tobbcolocalhost ~]$ sudo vim /usr/lib/systemd/system/docker.service在ExecStart配置末尾增加-H tcp://0.0.0.0:2375 -H unix://var/run/dock…

数据结构 1、基本概念 动态数组实现

一、大O表示法 判断一个算法的效率 难点 二、线性表 1.定义 2.数学定义 线性表是具有相同类型的n&#xff08;n>0&#xff09;个数据元素的有限序列&#xff08;a0,a1,a2,...,an&#xff09;,ai是表项&#xff0c;n是表长度 3.性质 4.线性表的基本操作 1.创建线性表 2…

微软允许OEM对Win10不提供关闭Secure Boot

用户可能将无法在Windows 10电脑上安装其它操作系统了&#xff0c;微软不再要求OEM在UEFI 中提供的“关闭 Secure Boot”的选项。 微软最早是在Designed for Windows 8认证时要求OEM的产品必须支持UEFI Secure Boot。Secure Boot 被设计用来防止恶意程序悄悄潜入到引导进程。问…

论文精读 MediaPipe BlazeFace

BlazeFace:Sub-millisecond Neural Face Detection on Mobile GPUs BlazeFace&#xff1a;基于移动GPUs的亚毫秒神经人脸检测 论文地址&#xff1a;arxiv.org/pdf/1907.05047.pdf 源码地址&#xff1a;GitHub - tkat0/PyTorch_BlazeFace: Unofficial PyTorch implementation…

【OpenVINO】基于 OpenVINO C# API 部署 RT-DETR 模型

基于 OpenVINO C# API 部署 RT-DETR 模型 1. RT-DETR2. OpenVINO3. 环境配置4. 模型下载与转换5. C#代码实现5.1 模型推理类实现1. 模型推理类初始化2. 图片预测API 5.2 模型数据处理类RTDETRProcess1. 定义RTDETRProcess2. 输入数据处理方法3. 预测结果数据处理方法 6. 预测结…

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV1)模型算法详解前言GoogLeNet(InceptionV1)讲解Inception结构InceptionV1结构1x1卷积的作用辅助分类器 GoogLeNet(Inceptio…

算法通关村第十六关青铜挑战——原来滑动窗口如此简单!

大家好&#xff0c;我是怒码少年小码。 从本篇开始&#xff0c;我们就要开始算法的新篇章了——四大思想&#xff1a;滑动窗口、贪心、回溯、动态规划。现在&#xff0c;向我们迎面走来的是——滑动窗口思想&#xff01;&#x1f61d; 滑动窗口思想 概念 在数组双指针里&am…

虚拟化服务器+华为防火墙+kiwi_syslog访问留痕

一、适用场景 1、大中型企业需要对接入用户的访问进行记录时&#xff0c;以前用3CDaemon时&#xff0c;只能用于小型网络当中&#xff0c;记录的数据量太大时&#xff0c;本例采用破解版的kiwi_syslog。 2、当网监、公安查到有非法访问时&#xff0c;可提供基于五元组的外网访…

SPI协议详解

SPI协议详解 文章目录 SPI协议详解前言一、SPI是什么&#xff1f;二、通信原理SPI 通信的 4 种工作模式 总结 前言 好久没写这种协议了&#xff0c;最近正好需要用到&#xff0c;便详细的复习一下。 一、SPI是什么&#xff1f; SPI是串行外设接口&#xff08;Serial Periphe…

Android studio2022.3项目中,如何去除底部导航菜单项被点击时的点击反馈效果(涟漪效果)

如果使用bottomNavigationView.setItemBackgroundResource(0)来去除底部导航菜单点击反馈效果不生效&#xff0c;可能是由于其它样式或主题的影响。 在这种情况下&#xff0c;可以通过自定义选择器&#xff08;selector&#xff09;来设置底部导航菜单项的背景。 首先&#x…

Spring-动态代理

动态代理 代理模式&#xff1a;为其他对象提供一种代理以控制对这个对象的访问&#xff0c;增强一个类中的某个方法&#xff0c;对程序进行扩展。 动态代理可以在不修改类源码的前提下&#xff0c;给类中方法增加额外逻辑 通过cglib来实现的代理对象的创建&#xff1a; 基于…

MES系统如何赋能制造企业实现4M防错追溯?

生产过程4M管理和MES系统的结合是现代制造业中关键的质量管理实践&#xff0c;它有助于提高生产效率、降低生产成本并保证产品质量。本文将深入探讨4M管理的概念&#xff0c;以及MES系统如何赋能制造企业实现4M防错追溯。 一、4M管理的概念 4M管理是指在制造过程中管理和控制四…

浅谈数据结构之递归

1. 递归的定义 递归是一种在解决问题时使用自身的特殊方法。在计算机科学和数据结构中&#xff0c;递归是一种通过将问题分解成更小的、相似的子问题来解决复杂问题的方法。递归可以直接或间接地调用自身&#xff0c;将大问题转化为规模较小的子问题&#xff0c;直到达到基本情…

leetCode 92.反转链表 II + 图解

92. 反转链表 II - 力扣&#xff08;LeetCode&#xff09; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 206. 反转链表 - 力扣&#xff08;LeetCode&am…

区块链链游合约系统开发项目模式技术方案

​随着区块链技术的发展&#xff0c;链游合约系统开发逐渐成为了一个备受关注的项目。本文将探讨区块链链游合约系统开发项目的技术方案&#xff0c;包括项目背景、开发目标、技术架构、系统流程、安全措施等方面的内容。 一、项目背景 链游是一种基于区块链技术的游戏&#xf…

加密磁盘密钥设置方案浅析 — LUKS1

虚拟化加密磁盘密钥设置方案浅析 前言元数据分析元数据格式整体格式头部格式加密算法密码校验key slot格式其它字段 流程验证 前言 我们在虚拟化加密磁盘密钥设置方案浅析 — TKS1中介绍了加密磁盘密钥设置方案&#xff0c;TKS1对密钥设置(Linux Unified Key Setup)的流程和方…

阿里云容器镜像服务的运维总结

一、背景 容器镜像服务&#xff0c;作为一个可选付费产品&#xff0c;主要作用是存储docker的镜像仓库&#xff0c;供k8s拉取到Pod节点里。 你可以自己搭建一个harbor镜像仓库&#xff0c;在公司的开发环境下&#xff0c;将image推送到仓库&#xff1b;然后在生产k8s从仓库拉取…