Spring注解 @Async 实现异步调用方法
异步方法调用使用场景:处理日志、发送邮件、发送短信。。。
关于@Async:
(1)Spring 3.0 以及以后版本中支持的@Async
(2)@Async修饰类,则该类所有方法都是异步的,@Async修饰方法,则该方法是异步的。
(3)只有@Async注解修饰的方法还不能够生效,还需要在SpringBoot的主程序Application中或对应的类上配置注解@EnableAsync才能够生效。
(4)@Async所修饰的函数不要定义为static类型,这样异步调用不会生效。
此Demo是模拟发邮件,我们网站的后台,给邮件服务器发送验证码让他发送到指定邮箱。然后立即通知用户,验证码已发送。不用等待邮件服务器完成后,才通知用户验证码已发送。假如邮件服务器给指定邮箱发送验证码失败,再通知用户,请重新获取验证码。
主程序Application
package com.example.springBootdemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
/*** * @author luolei* @date 2018年10月28日*/
@SpringBootApplication
@EnableAsync //开启异步
public class SpringBootDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringBootDemoApplication.class, args);}
}
controller
package com.example.springBootdemo.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.example.springBootdemo.service.impl.SendValidCodeServiceImpl;
/*** * @author luolei* @date 2019年1月30日*/
@RestController
/*@Controller
@ResponseBody*/
//@EnableAsync //开启异步
@RequestMapping("/sendValidCode")
public class SendValidCodeController {@Autowiredprivate SendValidCodeServiceImpl sendValidCodeService;@GetMapping("/send")//@RequestMapping("/send")public String SendValidCode() throws InterruptedException {System.out.println("1、后台服务器向邮件服务器请求:给XXX发送验证码...");sendValidCodeService.sendValidCode();sendValidCodeService.sendMesssage();return "success";}
}
service
package com.example.springBootdemo.service.impl;import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;@Service
public class SendValidCodeServiceImpl {@Asyncpublic void sendValidCode() throws InterruptedException{Thread.sleep(3000);System.out.println("2、邮件服务器操作:将验证码发送到XXX...");}@Asyncpublic void sendMesssage() throws InterruptedException{System.out.println("3、后台服务器提示用户:验证码已发送...");}}
效果
Spring注解 @Async 实现异步调用方法相关推荐
- java 异步调用 事务_深入理解Spring注解@Async解决异步调用问题
序言:Spring中@Async 根据Spring的文档说明,默认采用的是单线程的模式的.所以在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的. 那么当多个任务的执行势必会相互影响. ...
- 注解@Async解决异步调用问题
注解@Async解决异步调用问题 参考文章: (1)注解@Async解决异步调用问题 (2)https://www.cnblogs.com/mmzs/p/11557583.html 备忘一下.
- springboot 异步mysql_spring boot 使用@Async实现异步调用方法
使用@Async实现异步调用 什么是"异步调用"与"同步调用" "同步调用"就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码 ...
- Spring Boot使用@Async实现异步调用:自定义线程池
在之前的Spring Boot基础教程系列中,已经通过<Spring Boot中使用@Async实现异步调用>一文介绍过如何使用 @Async注解来实现异步调用了.但是,对于这些异步执行的 ...
- Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭
上周发了一篇关于Spring Boot中使用@Async来实现异步任务和线程池控制的文章:<Spring Boot使用@Async实现异步调用:自定义线程池>.由于最近身边也发现了不少异步 ...
- spring boot 学习(十一)使用@Async实现异步调用
使用@Async实现异步调用 什么是"异步调用"与"同步调用" "同步调用"就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码 ...
- Spring Boot 中的异步调用
Spring Boot 中的异步调用 通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行.而异步编程则没有这个限制,代码的 ...
- java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?
你知道java异步调用方法都有哪些吗?下面的文章内容,就对这方面的问题做了一下整理,一起来看看java异步调用的方法吧! 1.利用Spring的异步方法去执行 注:没有返回值 在启动类又或者是配置类加 ...
- SpringBoot异步调用方法
SpringBoot异步调用方法 一.spring boot--使用异步请求,提高系统的吞吐量 https://blog.csdn.net/liuchuanhong1/article/details/ ...
最新文章
- tomcat自启动问题 jsvc的 使用
- 基于mcat开发智能合约应用(二)调用合约
- sharepoint数据库研究
- centos7-docker-网络配置
- php sesssion,php sesssion原理
- 045、JVM实战总结:动手实验:自己动手模拟出对象进入老年代的场景体验一下(上)
- poj1036GangstersDP
- 2021-07-05 页面的生命周期
- 一对一社交app源码开发关于社交系统中视频添加功能
- 在线QuartzCron定时任务表达式在线生成
- Go游戏框架初探《一》
- 虚拟机VMware 15安装教程
- linux重装声卡驱动,linux声卡驱动重装
- 中国广电即将放号,感受到压力的中国移动率先推出19元5G套餐
- Linux工作目录切换命令
- 基于比原链开发Dapp(二)-开发流程
- 《游戏人工智能》学习笔记3——7 用脚本写现实世界的行为树
- 心理学 | (1)焦虑症和恐惧症--一种认知的观点
- 收款码在线生成系统源码 无限制
- 石川: 主流多因子模型巡礼
热门文章
- Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录
- 浅谈对机器学习方法(决策树,SVM,knn最近邻,随机森林,朴素贝叶斯、逻辑回归)的理解以及用sklearn工具实现文本分类和回归方法...
- 如何处理服务器磁盘沾满
- Codeforces-741A-Arpa's loud Owf and Mehrdad's evil plan(找有向图环及最大公倍数计算)
- Spring集成activeMQ
- UIButton和UIimageView
- Linux开启服务器问题(李蕾问题)
- rvm的安装, 使用rvm, 安装ruby, 以及gem的使用 (转)
- 神经网络如何进行深度估计?
- Transformer在计算机视觉领域走到哪了?