业务需求
有一张表,字段很多,每天通过跑job进行维护数据,数据来源是访问7,8个接口来拼凑成表中所有数据。
1.传统写法
按顺序分别调用每个接口,然后取出来数据拼凑到表对应类里面,这样拼凑后插入到表中一条数据大约要15s,1分钟4条。
而需要同步的用户数据有上万条,也就是每天根本同步不完。
2.并发写法
用Future并发调用所有接口,执行时间就是最久返回的接口的调取数据时间。通过xx.get获取数据。
大概就是用到spring异步注解(@Async) ,Future 接口 调用结果 之后 就能自己阻塞。
// 二.基础薪酬的
Future<List<EbsPayPlan>> payPlanList1 = dataFromEbsServiceSync.ebsPayPlanServiceDataFromEbsInsert(ebsParamMap, requestTime, timestamp);
// 三.定薪调薪的
Future<List<EbsPaychg>> payChgList1 = dataFromEbsServiceSync.ebsPaychgServiceDataFromEbsInsert(ebsParamMap, requestTime, timestamp);
// 四.1 年度标准业绩工资(当年)
Future<List<EbsPayStandard>> payStandardList1 = dataFromEbsServiceSync.ebsPayStandardServiceDataFromEbsInsert(ebsParamMap, requestTime, timestamp, year);
// 五.绩效接口地址
Future<List<EbsPerfDfcv>> perfDfcvList1 = dataFromEbsServiceSync.ebsPerfDfcvServiceDataFromEbsInsert(ebsParamMap, requestTime, timestamp);
// 六.年功工资(年功折算年份)
String d = "";
if (mon < 10) {
d = year + "0" + mon;
} else {
d = year + mon;
}
ebsParamMap.put("start_date", d);
ebsParamMap.put("end_date", d);
Future<String> annualPay1 = dataFromEbsServiceSync.dataFromEbsHr(ebsParamMap, requestTime);
List<EbsPayPlan> payPlanList = payPlanList1.get();
List<EbsPaychg> payChgList = payChgList1.get();
List<EbsPayStandard> payStandardList = payStandardList1.get();
List<EbsPerfDfcv> perfDfcvList = perfDfcvList1.get();
String annualPay = annualPay1.get();
ebsPayPlanServiceDataFromEbsInsert以及其他几个接口方法上注上注解@Async。
这样做时间会节省很多。
参考:https://book.itheima.net/course/1265899443273850881/1275010017375821825/1277531011030196227