Springboot使用异步调用@Async
分类:
文章
•
2023-03-10 13:00:04
@Slf4j是lombok里面的一个注解用来生成Logger对象的,来打印log日志
我写了一个userserviceimpl写了个controller方法,在不使用异步调用前,访问这个controller的结果就是1,2,3,4就是按部就班的执行,等到service的方法执行完成后才返回视图.
那么异步调用是什么意思呢,用来干什么呢?
比如在这个添加用户的操作里有个发送邮箱的功能,如果你这个方法一直等发送邮箱的功能执行完才返回结果,等的时间可能会很长,这样对用户的体验很不友好,异步调用就是把这个方法上加上异步调用的注解,这个注解在运行的时候就会动态的把这个方法单独提出一个线程来执行,和主线程互不干扰,不用等待它执行完就可以相应视图了.其实底层就是使用反射机制把方法方到线程中执行.
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzMwNC82NzM2MmQ3ZTZkNjVmNmM4ZDVjZDc1YjhkYzhhNzBiMC5wbmc=)
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzQ5MC8xODNlYmQwODgyNDYxZjY4NzAyMDY0YTIxZWQzMGVlMi5wbmc=)
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzE0OC8yYTlhNTdmNjJmZjU0MTczMTJiODM2OTYxYjNlMzQzYy5wbmc=)
这个相应结果出来是等了五秒后才出来的
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzUyMS9hMTQyYjYyNzk5NTEzMjE1NGM5YjMwYWFjYzI5Y2NlMS5wbmc=)
实现过程,在方法上加@Async注解,然后在启动类上加@EnableAsync开启异步调用
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkyMC80ODQ4MjZmNDE2MGM1YTJhNGYxOTc4ZmRiMTM2NDQ5OC5wbmc=)
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzE3L2ZmZDMzYWMyMjBiNTUzYTg4M2RjZTVjYzM4MWQ5ZDA5LnBuZw==)
执行顺序是1423说明没有等impl里的方法执行完就走了下面的代码了
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzU0MC8wNjQ3NmRiNTY2MWM0NzhlMzJjYTg3ZjgzZTdlZTFhYy5wbmc=)
这个相应结果是直接显示出来的,null是因为相应的时候impl的方法还没执行完,就是看的一个效果
![Springboot使用异步调用@Async Springboot使用异步调用@Async](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzc5NS82ZDI4ZTcxZGYxNGY3YTE2ZWI4MTQwYzg3YzE3YzA5Yi5wbmc=)