@Async注解的坑

news2024/10/7 16:18:02

问题描述

一个方法调用另一个方法(该方法使用@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("测试异步结束...");
    }

    @Async
    public 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);

    @Async
    public 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);

    @Autowired
    private TestAsyncService asyncService;

    @PostMapping("/test")
    public void test() {
        logger.info("测试异步开始...");
        try {
            asyncService.test1();
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.info("测试异步结束...");
    }
}

测试结果

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

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

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

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

相关文章

el-table解决数据过少小于高度有留白的问题

问题:给el-table设置个高度,高度为500px,之后就添加如下4条数据,那么底部就没数据,直接就空白了,本文章就是为了解决这个问题,如果底部留白那么就添加几条空数据就行了.如果数据已达到高度了那么就不会留白了 1.效果 这个空列可以根据高度来决定添加几个空格子去铺满列表&…

基于头脑风暴算法优化概率神经网络PNN的分类预测 - 附代码

基于头脑风暴算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于头脑风暴算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于头脑风暴优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

数字三角形模型 笔记

方格取数 走两次的最大值 f[k][i1][i2]来表示 k i1 j1 i2 j2; 每一个状态可由四种状态转换来&#xff0c;分别为 第一条路走下&#xff0c;第二条路走下 第一条路走下&#xff0c;第二条路走右 第一条路走右&#xff0c;第二条路走下 第一条路走右&#xff0c;第二条…

一文了解多线程实现交替执行

本文已收录于专栏 《Java》 目录 背景介绍实现方式总结提升 背景介绍 有一个需求是要求多个线程去执行任务&#xff0c;需要每个线程都执行一次之后再继续执行&#xff0c;也就是说每个线程交替去执行任务。举个例子来说&#xff0c;有两个线程&#xff0c;一个输出字母&#x…

全球步入VUCA时代,FinOps如何成为云计算下一个关键性机会?

科技云报道原创。 俗话说&#xff0c;省下来的就是利润。在全球都处于VUCA的时代&#xff0c;更是如此。 近年来&#xff0c;随着云计算的广泛应用,云成本管理成为企业关注的重点。FinOps&#xff08;云成本优化&#xff09;作为一种新兴的云成本管理方式&#xff0c;吸引了行…

基于蝴蝶算法优化概率神经网络PNN的分类预测 - 附代码

基于蝴蝶算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝴蝶算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝴蝶优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

成都爱尔周进院长解析高度近视可能引发哪些疾病

当代各类人群面对电脑、手机屏幕的时长显著增加&#xff0c;导致用眼过度、疲劳&#xff0c;视觉质量下降&#xff0c;近视人群越来越多。而当父母有一方为高度近视甚至可能将近视遗传给孩子。 目前&#xff0c;全球近视人数约25亿&#xff0c;中国近视人群人数多达6亿。据预测…

Unity--互动组件(Button)

1.组件的可交互 2.组件的过渡状态 3.组件的导航 4.组件的Event Button “”组件的可交互&#xff1a;“” Interactable&#xff1a; 该组件是否可点击&#xff08;设置为false时&#xff0c;将禁用交互&#xff0c;并且过渡状态将设置为禁用状态&#xff09;&#xff1b;…

基于RK3568的跑步机方案

I 方案简介 一、跑步机的来历 跑步机是家庭及健身房常备的健身器材&#xff0c;而且是当今家庭健身器材中最简单的一种&#xff0c;是家庭健身器的最佳选择。1965年北欧芬兰唐特力诞生了全球第一台家用的跑步机&#xff0c;设计师根据传速带的原理改变而成。 二、…

对红黑树的理解与实现(C++实现)

认识红黑树 在看到此篇文章之前最好还是先了解一下左右旋也就是AVL树的插入数据该如何处理。AVL树的插入详解-CSDN博客 红黑树&#xff0c;也属于是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是红色&#xff08;red&#xff09;…

小程序中如何设置多门店/多人/多商品价格库存等复杂场景设置

有些商家希望打造小程序平台&#xff0c;在这个平台上有多个商家入驻&#xff0c;他们分别售卖自己的商品。而有些商家有多个连锁店&#xff0c;连锁店的商品都是一样的&#xff0c;但不同的连锁店有不同的库存和价格。这些业务在采云小程序中是怎么支持的呢&#xff1f;下面具…

office365 outlook邮件无法删除

是否遇到过&#xff0c;office365邮件存储满了&#xff0c;删除邮件无法删除&#xff0c;即便用web方式登录到outlook&#xff0c;删除邮件当时是成功的&#xff0c;但一会儿就回滚回来了&#xff0c;已删除的邮件&#xff0c;你想清空&#xff0c;最后清理后还是回到原样。 请…

curl(八)时间和环境变量以及配置

一 时间 ① --connect-timeout 连接超时时间 ② -m | --max-time 数据最大传输时间 -m&#xff1a; 限制curl 完成时间(overall time limit)-m,--max-time <seconds> 整个交互完成的超时时间场景&#xff1a; 通过设置-m参数,可以避免请求时间过长而导致的超时错误…

纯CSS实现魔法渐变边框卡片

如图所示&#xff0c;这是一个很炫酷的卡片效果&#xff0c;关键效果在于卡片的边框呈渐变色变化着&#xff0c;在网页中有这样一个卡片相信可以极大的增强用户体验交互。本次文章将解读如何使用纯CSS实现这个炫酷的卡片效果。 基于上面的动图可以分析出以下是本次实现的主要几…

如何计算掩膜图中多个封闭图形的面积

import cv2def calMaskArea(image,idx):mask cv2.inRange(image, idx, idx)contours, hierarchy cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)for contour in contours:area cv2.contourArea(contour)print("图形的面积为", area) image是…

中国银行模拟器app,用java设计框架,图片网上找的,提供代码,仅供娱乐

回执单生成器的Java程序需要涉及到一些基本的Java编程技能&#xff0c;包括创建类、处理用户输入和格式化输出。下面是一个简单的示例代码&#xff0c;用于生成一个简易的回执单。这个程序将接收用户的输入&#xff0c;然后生成一个格式化的回执单。 请注意&#xff0c;这个示…

查看包是由哪个依赖引入的

问题&#xff1a;在Maven项目中&#xff0c;如何查看某个包是由pom.xml文件的哪个依赖引入的&#xff1f; 示例&#xff1a; mvn dependency:tree -Dverbose -Dincludesjakarta.validation:jakarta.validation-api或者&#xff1a; mvn dependency:tree -Dincludesvelocity:…

【python自动化】Playwright基础教程(十)元素拖拽元素坐标获取网页源码元素内文本

【python自动化】Playwright基础教程&#xff08;十&#xff09;元素拖拽&元素坐标&获取网页源码&元素内文本 本文目录 文章目录 【python自动化】Playwright基础教程&#xff08;十&#xff09;元素拖拽&元素坐标&获取网页源码&元素内文本playwright…

链表题(3)

链表题 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 本篇内容继续给大家带来链表的一些练习题 链表分割 知识点&#xff1a; 编程基础 链表…

Rust语言基础:从Hello World开始

大家好&#xff0c;我是[lincyang]。 我们将一起探索Rust语言的基础&#xff0c;从最经典的程序入手——“Hello, World!”。 Rust简介 Rust是一种系统编程语言&#xff0c;由Mozilla赞助开发&#xff0c;旨在提供内存安全、并发性和实用性。它的设计思想强调安全性和性能&…