Feature使用过程中遇到的一个坑

直接上代码

 1      List<String> res = pageList;
 2 
 3         // 从callExtensionParamMap中解析出
 4         Long bosId = Objects.isNull(callExtensionParamMap.get(BOS_ID_KEY)) ? null: (Long) callExtensionParamMap.get(BOS_ID_KEY);
 5         Long productInstanceId = Objects.isNull(callExtensionParamMap.get(PRODUCT_INSTANCE_ID_KEY)) ? null: (Long) callExtensionParamMap.get(PRODUCT_INSTANCE_ID_KEY);
 6         Long productId = Objects.isNull(callExtensionParamMap.get(PRODUCT_ID_KEY)) ? null: (Long) callExtensionParamMap.get(PRODUCT_ID_KEY);
 7         String tCode = Objects.isNull(callExtensionParamMap.get(T_CODE_KEY)) ? null: (String) callExtensionParamMap.get(T_CODE_KEY);
 8         Long vid = Objects.isNull(callExtensionParamMap.get(VID_KEY)) ? null: (Long) callExtensionParamMap.get(VID_KEY);
 9         Integer vidType = Objects.isNull(callExtensionParamMap.get(VID_TYPE_KEY)) ? null: (Integer) callExtensionParamMap.get(VID_TYPE_KEY);
10 
11         UnfoldBaseRequest request = new UnfoldBaseRequest();
12         request.setBosId(bosId);
13         request.setProductInstanceId(productInstanceId);
14         request.setProductId(productId);
15         request.setTCode(tCode);
16         request.setVid(vid);
17         request.setVidType(vidType);
18         request.setWidList(widList);
19         
20         List<Future<Map<Long, UnfoldBaseResponse>>> futures = new ArrayList<>(domains.size());
21 
22         for (String domain : domains) {
23 
24             
25             request.setDomain(domain);
26 
27             Future<Map<Long, UnfoldBaseResponse>> future = commonExecutor.submit(new Callable<Map<Long, UnfoldBaseResponse>>() {
28                 @Override
29                 public Map<Long, UnfoldBaseResponse> call() throws Exception {
30                     return userIntegration.getUserSearchInfo(request);
31                 }
32             });
33 
34             futures.add(future);
35 
36         }
37 
38         for (Future<Map<Long, UnfoldBaseResponse>> future: futures) {
39             try {
40                 Map<Long, UnfoldBaseResponse> unfoldBaseResponseMap = future.get();
41 
42                 res = populateProperty(res, unfoldBaseResponseMap);
43             } catch (Exception e) {
44                 log.warn("crm组装信息异常", e);
45             }
46         }

结果发现第30行里所有的请求domain都是一致的,我相信有经验的已经看出了端倪。

没错,因为submit方法里传入的是同一个request对象,那么就会以最后一个设置的domain作为最终请求的值去发起请求

修改方式:将Request创建放在for循环里面即可

 1      // 从callExtensionParamMap中解析出
 2         Long bosId = Objects.isNull(callExtensionParamMap.get(BOS_ID_KEY)) ? null: (Long) callExtensionParamMap.get(BOS_ID_KEY);
 3         Long productInstanceId = Objects.isNull(callExtensionParamMap.get(PRODUCT_INSTANCE_ID_KEY)) ? null: (Long) callExtensionParamMap.get(PRODUCT_INSTANCE_ID_KEY);
 4         Long productId = Objects.isNull(callExtensionParamMap.get(PRODUCT_ID_KEY)) ? null: (Long) callExtensionParamMap.get(PRODUCT_ID_KEY);
 5         String tCode = Objects.isNull(callExtensionParamMap.get(T_CODE_KEY)) ? null: (String) callExtensionParamMap.get(T_CODE_KEY);
 6         Long vid = Objects.isNull(callExtensionParamMap.get(VID_KEY)) ? null: (Long) callExtensionParamMap.get(VID_KEY);
 7         Integer vidType = Objects.isNull(callExtensionParamMap.get(VID_TYPE_KEY)) ? null: (Integer) callExtensionParamMap.get(VID_TYPE_KEY);
 8 
 9         List<Future<Map<Long, UnfoldBaseResponse>>> futures = new ArrayList<>(domains.size());
10 
11         for (String domain : domains) {
12 
13             UnfoldBaseRequest request = new UnfoldBaseRequest();
14             request.setBosId(bosId);
15             request.setProductInstanceId(productInstanceId);
16             request.setProductId(productId);
17             request.setTCode(tCode);
18             request.setVid(vid);
19             request.setVidType(vidType);
20             request.setWidList(widList);
21             request.setDomain(domain);
22 
23             Future<Map<Long, UnfoldBaseResponse>> future = commonExecutor.submit(new Callable<Map<Long, UnfoldBaseResponse>>() {
24                 @Override
25                 public Map<Long, UnfoldBaseResponse> call() throws Exception {
26                     return userIntegration.getUserSearchInfo(request);
27                 }
28             });
29 
30             futures.add(future);
31 
32         }
33 
34         for (Future<Map<Long, UnfoldBaseResponse>> future: futures) {
35             try {
36                 Map<Long, UnfoldBaseResponse> unfoldBaseResponseMap = future.get();
37 
38                 res = populateProperty(res, unfoldBaseResponseMap);
39             } catch (Exception e) {
40                 log.warn("crm组装信息异常", e);
41             }
42         }

 

posted on 2022-01-07 10:41  Iversonstear  阅读(40)  评论(0编辑  收藏  举报

导航