spring异步方法@Async

 我来答
大沈他次苹0B
2022-07-20 · TA获得超过7348个赞
知道大有可为答主
回答量:3059
采纳率:100%
帮助的人:180万
展开全部
在Spring Boot中,我们只需要使用@Async注解就能简单的将原来的同步函数变为异步函数。

开启方法:启动类或者配置类上加@EnableAsync注解,然后在方法或者类上加@Async,类上加注解表示类中方法都实现异步调用。

工作原理:

spring 在扫描bean的时候会扫描方法上是否包含@async的注解,如果包含的,spring会为这个bean动态的生成一个子类,我们称之为代理类,代理类是继承我们所写的bean的,然后把代理类注入进来,那此时,在执行此方法的时候,会到代理类中,代理类判断了此方法需要异步执行,就不会调用父类的对应方法。spring自己维护了一个队列,他会把需要执行的方法,放入队列中,等待线程池去读取这个队列,完成方法的执行,从而完成了异步的功能。spring提供了默认线程池ThreadPoolTaskExecutor,支持手动配置属性。

需要注意的地方:

1.在同一个类中的方法调用,添加@async注解是失效的。原因是当你在同一个类中的时候,方法调用是在类中执行的,spring无法截获这个方法调用,也就不会在代理类里执行。

2.可能会导致循环依赖,spring本身会解决循环依赖,但是因为@Async使用代理模式,spring在检查第二级缓存和原始对象是否相等时发现不相等,会抛出异常。

3.无法获取请求上下文。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式