今天线上遇到了很奇怪的问题,方法传递过程中参数是有的,但是正在处理参数突然置空,过程如下图:
从图中可以看出我们正在使用的requestMap突然置空,中间没有任何处理。我们查看他的上层发现调用采用的异步的方式:
Map<String, String[]> requestMap = request.getParameterMap();
//线程处理数据入库逻辑
executorService.execute(() -> {
log.info(System.currentTimeMillis()+"");
String batch = "";
try {
batch = dataCenterService.insertOrdinaryData(requestMap);
} catch (SQLException e) {
throw new NullDateException("处理逻辑有误,请尽快反馈处理");
}
//处理数据插入业务表
insertBusinessTable(batch);
log.info(System.currentTimeMillis()+"");
log.info("传输成功");
});
我们需要在异步数据传入之前做一层拷贝,这样请求结束之后接收的参数才不会置空
Map<String, String[]> objectObjectHashMap = new HashMap<>(requestMap);
//线程处理数据入库逻辑
executorService.execute(() -> {
log.info(System.currentTimeMillis()+"");
String batch = "";
try {
batch = dataCenterService.insertOrdinaryData(objectObjectHashMap);
} catch (SQLException e) {
throw new NullDateException("处理逻辑有误,请尽快反馈处理");
}
//处理数据插入业务表
insertBusinessTable(batch);
log.info(System.currentTimeMillis()+"");
log.info("传输成功");
});