SpringBoot:@Async实现异步方法调用

亦凉 2022-04-02 08:16 403阅读 0赞

一,@Async注解

  1. @AsyncSprngBoot框架提供的框架内部已经整合好的异步调用方式。在入口处开启异步调用按钮,然后在调用方法上直接添加该注解,就可以自动实现异步调用。

二,异步发送类

  1. package com.gupao.springboot.test.controller;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RestController;
  6. /**
  7. * SpringBoot异步调用测试
  8. * @author pj_zhang
  9. * @create 2018-12-25 21:19
  10. **/
  11. @RestController
  12. @Slf4j
  13. public class AsyncController {
  14. // 注入消费者类
  15. @Autowired
  16. private ProcessorController processorController;
  17. @RequestMapping("/sendMlessage")
  18. public String sendMessage() {
  19. log.info("start sendMessage ====== " + 1);
  20. // 该方法添加了@Async注解, 实现异步调用
  21. processorController.processor();
  22. log.info("end sendMessage ===== " + 4);
  23. return "SUCCESS";
  24. }
  25. }

三,异步接收类

  1. package com.gupao.springboot.test.controller;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.scheduling.annotation.Async;
  4. import org.springframework.stereotype.Controller;
  5. /**
  6. * 异步接收类
  7. * @author pj_zhang
  8. * @create 2018-12-25 21:22
  9. **/
  10. @Controller
  11. @Slf4j
  12. public class ProcessorController {
  13. // 添加异步注解
  14. @Async
  15. public void processor() {
  16. log.info("start processor ====== " + 2);
  17. try {
  18. // 睡眠2S查看异步效果
  19. Thread.sleep(2000);
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. log.info("end processor ====== " + 3);
  24. }
  25. }

四,SpringBoot程序主入口开启异步

  1. package com.gupao.springboot;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.scheduling.annotation.EnableAsync;
  5. @SpringBootApplication
  6. // 开启异步消息
  7. @EnableAsync
  8. public class GupaoSpringbootApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(GupaoSpringbootApplication.class, args);
  11. }
  12. }

五,效果演示

20181225221424445.png

20181225221437529.png

  1. \* 发送消息线程沉睡1S,再次尝试
  2. @RequestMapping("/sendMlessage")
  3. public String sendMessage() {
  4. log.info("start sendMessage ====== " + 1);
  5. processorController.processor();
  6. try {
  7. Thread.sleep(1000);
  8. } catch (InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. log.info("end sendMessage ===== " + 4);
  12. return "SUCCESS";
  13. }

20181225221629612.png

发表评论

表情:
评论列表 (有 0 条评论,403人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用PHP实现异步数据调用方法

    在Web开发中,异步数据调用是一种常见的技术,它允许我们在不刷新整个页面的情况下,通过异步请求从服务器获取数据并将其展示给用户。在PHP中,我们可以使用AJAX技术来实现异步数