前言:
任何与业务逻辑没有直接关联的逻辑(横切关注点)或在调用者上下文中不需要响应以确定下一个流或任何业务的逻辑是Asyncronization的理想候选者。在Spring中使用@Async注释使用异步,如果你在方法上使用随机的@Async注释并且认为你的方法将在一个单独的线程中以异步方式调用这是错的。
要知道@Async如何工作的和它的特性,不然你就无法理解异步行为。
@Async 如何工作?
当在方法上添加@Async注释时,它会基于proxyTargetClass 属性创建该对象的代理,其中定义了@Async(JDK Proxy/CGlib) 。Spring 尝试查找与上下文关联的线程池,将此方法的逻辑作为单独的执行路径提交,如果未找到则会搜索唯一的 TaskExecutor bean或名为taskExecutor的bean使用默认的 SimpleAsyncTaskExecutor。
@Async的限制
1.编写一个类并创建方法,将@Async置于该方法之上,如果通过创建本地实例从另一个类中使用该类,那么它将不会触发异步,它必须由Spring @ComponentScan注释扫描或在标记为@Configuration的类中创建。
//被调用方法
import java.util.Map;
import org.sp