@EnableAsyn
有时,我们需要在一个方法中完成方法内的逻辑后需要通知其他接口,但是不需要等其他接口返回结果就直接在当前方法中返回(比如用户支付完订单后需要及时给用户返回支付结果,同时需要通知商户:用户已完成支付),这时就需要异步调用(不用等待通知完商户才给用户返回支付结果)。
1.在启动类上添加@EnableAsync注解,表示项目支持异步方法调用;
2.在需要异步调用的方法上添加@Async注解,表示该方法为异步方法,即该方法和调用者不在一个线程中进行。
示例代码:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication @EnableAsync public class AsyncDemoApplication { /** * 异步方法 * * @throws InterruptedException */ @Async public void asyncMethod() throws InterruptedException { for (int i = 1; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "********" + i); } } public static void main(String[] args) { try { //获取上下文 ConfigurableApplicationContext context = SpringApplication.run(AsyncDemoApplication.class, args); //获取对象bean,进而调用异步方法 context.getBean(AsyncDemoApplication.class).asyncMethod(); for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "********" + i); if (2 == i) Thread.sleep(1000l); } } catch (InterruptedException e) { e.printStackTrace(); } } }