使用CompletableFuture任务编排,异步多表数据查询
作者:互联网
@Override
public IndexTodoInfoVO getTodoInfo(String beginCreateTime, String endCreateTime) {
//实例化vo对象
IndexTodoInfoVO indexTodoInfoVO = new IndexTodoInfoVO();
//获取当前用户
String username = SecurityUtils.getUsername();
//使用CompletableFuture异步线程,向公共线程池提交一些任务.
/**
* 1、使用supplyAsync()从某些数据库中获取数据
* 2、使用thenAccept(),将此数据写入CSV文件
*/
CompletableFuture<Integer> aFuture = CompletableFuture.supplyAsync(() -> {
return clueMapper.getTofollowedCluesNum(username, beginCreateTime, endCreateTime);
});
CompletableFuture<Integer> bFuture = CompletableFuture.supplyAsync(() -> {
return businessMapper.getTofollowedCluesNum(username, beginCreateTime, endCreateTime);
});
CompletableFuture<Integer> cFuture = CompletableFuture.supplyAsync(() -> {
return clueMapper.getToallocatedCluesNum(username, beginCreateTime, endCreateTime);
});
CompletableFuture<Integer> dFuture = CompletableFuture.supplyAsync(() -> {
return businessMapper.getToallocatedBusinessNum(username, beginCreateTime, endCreateTime);
});
// join()和get()方法都是用来获取CompletableFuture异步之后的返回值
CompletableFuture.allOf(aFuture,bFuture,cFuture,dFuture).join();
//封装给指定VO对象
try {
indexTodoInfoVO.setTofollowedCluesNum(aFuture.get());
indexTodoInfoVO.setTofollowedCluesNum(bFuture.get());
indexTodoInfoVO.setToallocatedCluesNum(cFuture.get());
indexTodoInfoVO.setToallocatedBusinessNum(dFuture.get());
} catch (Exception e) {
throw new CustomException(e.getMessage());
}
//返回数据
return indexTodoInfoVO;
}
标签:username,异步,多表,get,endCreateTime,indexTodoInfoVO,CompletableFuture,return 来源: https://www.cnblogs.com/luoxiao1104/p/16389107.html