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

@Async(“asyncTaskExecutor“) 注解介绍

@Async(“asyncTaskExecutor”) 注解用于 Spring 框架中的异步处理功能。它允许你将某个方法标记为异步执行,以便在调用时不阻塞当前线程。下面是如何使用这个注解的详细步骤。

  1. 添加依赖

首先,确保你的 pom.xml 中包含 Spring Boot Starter Web 和 Spring Boot Starter Async 的依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>
</dependencies>
  1. 启用异步支持

在你的主应用类或配置类中,使用 @EnableAsync 注解启用异步支持:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;@SpringBootApplication
@EnableAsync
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
  1. 配置任务执行器

定义一个异步任务执行器。你可以在配置类中自定义它:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;@Configuration
public class AsyncConfig implements AsyncConfigurer {@Bean(name = "asyncTaskExecutor")public Executor asyncTaskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(25);executor.initialize();return executor;}
}
  1. 使用 @Async 注解

在需要异步执行的方法上使用 @Async 注解:

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;@Service
public class MyAsyncService {@Async("asyncTaskExecutor")public void executeAsyncTask() {// 模拟耗时任务try {Thread.sleep(3000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}System.out.println("异步任务完成");}
}
  1. 调用异步方法

在控制器或其他服务中调用这个异步方法:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@Autowiredprivate MyAsyncService myAsyncService;@GetMapping("/start-async")public String startAsync() {myAsyncService.executeAsyncTask();return "异步任务已启动";}
}

注意事项

异步方法必须是 public 的,并且不能在同一类中调用自己,否则会因为 AOP 的代理机制而失效。
异步方法的返回值类型应该是 void 或 Future<T>,以便处理返回结果。

http://www.mrgr.cn/news/63522.html

相关文章:

  • Java第二阶段---15异常---第三节 自定义异常
  • 【急救】——心肺复苏和AED使用以及海姆立克法
  • SPA——MVC 与 MVVM - 2024最新版前端秋招面试短期突击面试题【100道】
  • 基于Matlab的图像去噪算法仿真
  • STM32 DAC学习日记
  • 【第一个qt项目的实现和介绍以及程序分析】【正点原子】嵌入式Qt5 C++开发视频
  • 链栈的引用
  • C# 两个不同文件路径的同步
  • Latex中Reference的卷号加粗的问题
  • 指令系统 II(程序的机器级代码表示、CISC 和 RISC)
  • 写一个小日历
  • 中电金信:GienTech动态|丰收之秋,公司多项目获得荣誉
  • 如何解决docker镜像下载失败问题
  • (9)位运算
  • 用友U8采购入库单与旺店通·企业奇门集成方案解析
  • [CSP篇] CSP2024 游记(下)
  • 机器学习:我们能用机器学习来建立投资模型吗
  • C++模拟实现list
  • 第5章第6章 Servlet技术
  • 【果实种子识别】Python+深度学习+人工智能+CNN卷积神经网络算法+TensorFlow+算法模型训练
  • 【升华】机器学习鸢尾花分类完整代码示例
  • 助力抑郁症初筛!上海交大团队构建Agent心理诊所,论文一作在线展示demo,分享技术亮点
  • Games101笔记-三维Transform变换(三)
  • python--函数详解二
  • ngnix.conf文件配置前后端联调地址
  • 8.FreeRTOS之软件定时器