多线程并发

业务需求
有一张表,字段很多,每天通过跑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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值