mt4外汇金融网站建设,网销怎么找客户,自适应 网站,开发网站的工具有哪些今天在做公司项目时#xff0c;有一个发邮件的需求。所以写了一个发送邮件的方法后来发现发邮件很慢#xff0c;导致接口响应也很慢。于是我便想到要使用异步调用去处理这个方法。于是我把注解Async 加到了自己service类下的一个发邮件的一个方法#xff0c;后来发现并没有生…今天在做公司项目时有一个发邮件的需求。所以写了一个发送邮件的方法后来发现发邮件很慢导致接口响应也很慢。于是我便想到要使用异步调用去处理这个方法。于是我把注解Async 加到了自己service类下的一个发邮件的一个方法后来发现并没有生效。 调用处代码 我在以下两个方法上都试过加上Async注解 可是都并没有生效
发送邮件代码 我思考了一下可能应该是因为aop代理的缘故被调用方法 和 调用处的代码都处在同一个类所以只是相当于本类调用并没有使用代理类 从而Async并没有产生效果。 于是我查询了一下资料证实了我的想法于是我把Async 注解放到了工具类 MailService 下 修改了注解的添加位置后接口调用明显速度加快了成功
总结
失效原因 1.SpringBootApplication启动类当中没有添加EnableAsync注解。 2.异步方法使用注解Async的返回值只能为void或者Future。 3.没有走Spring的代理类。因为Transactional和Async注解的实现都是基于Spring的AOP而AOP的实现是基于动态代理模式实现的。那么注解失效的原因就很明显了有可能因为调用方法的是对象本身而不是代理对象因为没有经过Spring容器管理。 解决方法: 这里具体说一下第三种情况的解决方法。 1.注解的方法必须是public方法。 2.方法一定要从另一个类中调用也就是从类的外部调用类的内部调用是无效的。 3.如果需要从类的内部调用需要先获取其代理类。