請求大資料量介面時手動分頁
阿新 • • 發佈:2019-01-24
前段時間做專案遇到這麼種情況,需要呼叫一個批量查詢介面,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; }
這樣算是解決問題了,大家有更好的方法可以分享出來。