1. 程式人生 > >請求大資料量介面時手動分頁

請求大資料量介面時手動分頁

前段時間做專案遇到這麼種情況,需要呼叫一個批量查詢介面,GET請求的 ,比如根據使用者id批量查詢使用者資訊的,介面提供方提供的就是GET請求的,然而我們一次要查詢幾萬個使用者,這樣請求的結果就是介面直接掛掉,因為GET請求沒法傳遞那麼多資料,最後的解決方案是人為地進行分頁

private List<UserDto> queryUserInfo(List<Integer> userIds) {
        Integer length = userIds.size();
        Integer page = 1;
        Integer size = CommonConstants.QUERY_USER_LIMIT_MAX;//這裡做成配置

        if (length > size) {
            page = length / size + (length % size > 0 ? 1 : 0);
        }
        List<UserDto> userInfos = new ArrayList<>();

        for (int i = 1; i <= page; i++) {
            List<Integer> newList = userIds.subList((i - 1) * size, page == i ? length : size * i);
            try {
                //批量獲取使用者資訊
                List<UserDto> result = userAgentService.getUserInfoByIds(newList);
                userInfos.addAll(result);
            } catch (Exception er) {
                logger.error("queryUserInfo呼叫使用者介面獲取資訊失敗 :[{}]", JsonUtil.object2JSON(newList), er.getMessage());
            }
        }
        return userInfos;
    }

這樣算是解決問題了,大家有更好的方法可以分享出來。