其他分享
首页 > 其他分享> > 使用CompletableFuture任务编排,异步多表数据查询

使用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