• ​@Async​


    Spring框架中的 ​@Async​注解是为了支持异步方法调用而设计的。

    异步方法调用是指调用方在发起方法调用后,不需要等待被调用方法的结果返回,而是可以立即继续执行其他任务。这种方式能够提高系统的并发性和响应性,特别适用于一些耗时较长、不需要立即获取结果的操作。

    • 引入相关依赖(pom.xml):
    1. org.springframework.boot
    2. spring-boot-starter-web
    3. org.springframework.boot
    4. spring-boot-starter-aop
    5. org.springframework.boot
    6. spring-boot-starter-task
    • 在启动类上添加@EnableAsync注解,开启异步功能。 
    1. import org.springframework.boot.SpringApplication;
    2. import org.springframework.boot.autoconfigure.SpringBootApplication;
    3. import org.springframework.scheduling.annotation.EnableAsync;
    4. @SpringBootApplication
    5. @EnableAsync
    6. public class DemoApplication {
    7. public static void main(String[] args) {
    8. SpringApplication.run(DemoApplication.class, args);
    9. }
    10. }
    • 创建一个Service类,在其中定义标有@Async注解的异步方法。
    1. import org.slf4j.Logger;
    2. import org.slf4j.LoggerFactory;
    3. import org.springframework.scheduling.annotation.Async;
    4. import org.springframework.stereotype.Service;
    5. @Service
    6. public class MyService {
    7. private static final Logger LOGGER = LoggerFactory.getLogger(MyService.class);
    8. @Async
    9. public void asyncMethod() {
    10. LOGGER.info("Async method start");
    11. // 模拟耗时操作
    12. try {
    13. Thread.sleep(2000);
    14. } catch (InterruptedException e) {
    15. e.printStackTrace();
    16. }
    17. LOGGER.info("Async method end");
    18. }
    19. }
    • 创建一个Controller类,调用异步方法。
    1. import org.springframework.beans.factory.annotation.Autowired;
    2. import org.springframework.web.bind.annotation.GetMapping;
    3. import org.springframework.web.bind.annotation.RestController;
    4. @RestController
    5. public class MyController {
    6. @Autowired
    7. private MyService myService;
    8. @GetMapping("/async")
    9. public String async() {
    10. myService.asyncMethod();
    11. return "Async method called";
    12. }
    13. }

     当访问 ​http://localhost:8080/async​时,MyService类中的asyncMethod方法将在独立线程中异步执行,而不会阻塞当前请求线程。在日志中可以看到异步方法的开始和结束输出。

    要使@Async注解生效,还需要在配置类中添加@EnableAsync注解,并配置合适的线程池。例如,在Spring Boot中可以通过修改application.properties文件添加以下配置: 

    1. spring.task.execution.pool.core-size=5
    2. spring.task.execution.pool.max-size=10
    3. spring.task.execution.pool.queue-capacity=10000
    4. spring.task.execution.pool.thread-name-prefix=my-async-

  • 相关阅读:
    窗函数法设计FIR中,如何选择窗函数和阶数N
    PC端、H5端、小程序端、app端区别及一些基础知识(react、taro、RN创建项目命令总结)
    2022年全球市场中空玻璃密封胶总体规模、主要生产商、主要地区、产品和应用细分研究报告
    单片机-LED介绍
    深入理解Linux0.11内核之文件系统之SYS_WRITE系统调用
    02-课程发布
    【无标题】
    JAVA--AI编程助手【代码智能补全工具】盘点,让AI提高你的编程效率
    百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12
    什么是BFC
  • 原文地址:https://blog.csdn.net/hay23455/article/details/132462521