服务中同步最大量活动记录至文件任务的技术实现问询
解决方案:完善Sync Max Record Task代码以满足分文件与空记录校验要求
核心改进点
- 空记录校验:先判断记录集合是否为
null或空,直接跳过文件创建流程,避免生成空文件 - 分批处理逻辑:按每10000条记录为一批拆分,循环生成对应文件,自动处理最后一批不足10000条的情况
- 安全的记录截取:使用
subList时严格控制索引范围,防止数组越界异常
完善后的代码片段
// 校验记录是否为null或空,满足要求1:空记录不创建文件 if (records == null || records.isEmpty()) { return; // 直接终止流程,不执行后续文件创建逻辑 } int totalRecords = records.size(); int batchSize = 10000; int noOfFiles = 0; String filePrefix = dataFileDirectory + "Data_" + jobId + "_"; // 循环处理每一批记录,满足要求2:超过10000条时分文件存储 for (int startIndex = 0; startIndex < totalRecords; startIndex += batchSize) { noOfFiles++; // 计算当前批次的结束索引,避免超出总记录数 int endIndex = Math.min(startIndex + batchSize, totalRecords); // 截取当前批次的记录 List<?> batchRecords = records.subList(startIndex, endIndex); // 写入当前批次到文件 try (FileWriter datafile = new FileWriter(filePrefix + noOfFiles + "." + fileextension)) { datafile.write(batchRecords.toString()); datafile.flush(); } catch (IOException e) { // 可根据业务需求添加异常处理,比如日志记录、重试逻辑等 e.printStackTrace(); } }
代码说明
- 空值校验:开头的
if (records == null || records.isEmpty())直接拦截空记录场景,完全符合要求1 - 分批计算:通过
startIndex递增batchSize(10000)遍历所有记录,endIndex用Math.min确保不会超过总记录数,完美处理最后一批不足10000条的情况 - 文件命名:每批对应一个递增的
noOfFiles,保证文件名称唯一且顺序正确 - 资源管理:保留原有的
try-with-resources语法,自动关闭FileWriter,避免资源泄漏
内容的提问来源于stack exchange,提问作者Hima
相关产品推荐
相关产品推荐

