定时任务扫描需要注意的点

299 阅读1分钟

初学java笔记, 仅针对定时扫描 修复历史数据功能一点

  1. 因为历史数据修复功能很复杂,所以不能频繁扫描影响先有功能,设定10分钟一次
  2. 每次扫描要限定数量,比如100个
  3. 扫描的数据保证不重复扫描之前的单子,此处注意的是中途报错无法完成的情况,需要建立一个缓存errorDataList 来保存无法完成的单子。 lastDataList是上一次扫描无法完成的单子
  4. 留个清除缓存的功能
if (qqList != null && !qqList.isEmpty()) {
    // 排除出错数据
    for (Iterator<Map<String, String>> iterator = qqList.iterator(); iterator.hasNext();) {
        Map<String, String> attr = iterator.next();
        String qqId = attr.get("ID");
        if (lastDataList.contains(qqId)) {
            iterator.remove();
            errorDataList.add(qqId);
            continue;
        }
        if (errorDataList.contains(qqId)) {
            iterator.remove();
        }
    }
    lastDataList.clear();
    log.info("qq without xx number: " + qqList.size());
    // 每次截取10个
    if (qqList.size() > 10) {
        List<Map<String, String>> subList = qqList.subList(0, 10);
        lastDataList.addAll(subList.stream().map(p -> p.get("ID")).collect(Collectors.toList()));
        createXx(subList);
    }
    else {
        lastDataList.addAll(qqList.stream().map(p -> p.get("ID")).collect(Collectors.toList()));
        createXx(qqList);
    }
}
else if (qqList == null) {
    log.info("qq without xx number: 0");
}