Spring Boot 异步方法的调用

参考资料:

1、Spring Boot中使用@Async实现异步调用

使用方法

两个步骤:

1、开启配置 @EnableAsync,这一步特别容易忘记,导致测试的时候不生效,所以请留意。

2、使用注解 @Async

特别注意: @Async所修饰的函数不能定义为 static 类型,如果是 static 类型异步调用不会生效。

如何获得异步方法的返回值

1、将异步方法原来的 void 声明改为 Future<T>

2、异步方法的返回值为 new AsyncResult<T>

3、测试方法:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = HelloWorldApplication.class)
public class TaskTest { @Autowired
private Task task; @Test
public void test01(){
Future<String> f1 = task.doTaskOne();
Future<String> f2 = task.doTaskTwo();
Future<Integer> f3 = task.doTaskThree(); try {
while (f1.isDone()){
System.out.println(f1.get());
} while (f2.isDone()){
System.out.println(f2.get());
} while (f3.isDone()){
System.out.println(f3.get());
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} CountDownLatch countDownLatch = new CountDownLatch(1);
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("JVM 退出");
}
}

源代码可以在我的 GitHub 上下载,地址是:我的 GitHub,请记得选择 async 分支。

05-11 13:55
查看更多