public abstract class AtomicBatchService implements Serializable {private static final long serialVersionUID = 2931723128262800986L;
private static final Logger logger = LoggerFactory.getLogger(AtomicBatchService.class);
private long LAST_BATCH_INSERT_TIME = System.currentTimeMillis();
public AtomicReference
【本地批量缓存】
批量定时器:
public class AtomicTimerTask extends TimerTask {private AtomicBatchService atomicBatchService;
public AtomicTimerTask(AtomicBatchService atomicBatchService) {this.atomicBatchService = atomicBatchService;
}@Override
public void run() {System.out.println(String.format("批量任务定时器开始处理:%s|%sms", this.atomicBatchService.getClass().getName(), this.atomicBatchService.getConfig().getPeriod()));
if (!atomicBatchService.isExcuteTask()) {
System.out.println("批量任务执行正常,无需执行定时器任务!");
return;
}if (atomicBatchService.out == null) {// 不需要再执行输出下一环节操作
atomicBatchService.excute();
} else {
atomicBatchService.out(atomicBatchService.out, atomicBatchService.excute());
}
}
应用:(继承)
public class ChaifenService extends AtomicBatchService, Collector> {private static HighLevelRestDao highLevelRestDao = new HighLevelRestDaoImpl();
private static String ES_INDEX_NAME = "chaifen_vehicle";
private static String ES_DOC_TYPE = "chaifen_vehicle";
@Override
public List batchOperation(List dataList) {
List liRequestList = Lists.transform(dataList, new Function() {
@Nullable
@Override
public String apply(@Nullable JSONObject jsonObject) {
return jsonObject.getString("line_require_id");
}
});
if (ListUtil.isEmpty(liRequestList)){
return dataList;
}try {
QueryCondition queryCondition = new QueryCondition(ES_INDEX_NAME,ES_DOC_TYPE);
queryCondition.setField("line_require_id",liRequestList);
highLevelRestDao.doSyncDelete(queryCondition);
}catch (Exception e){
e.printStackTrace();
}return dataList;
}@Override
public void out(Collector stringCollector, List resultList) {
if (ListUtil.isEmpty(resultList)) {
return;
}for (JSONObject dataJson : resultList) {
out.collect(dataJson.toJSONString());
}}@Override
public Context getConfig() {
return new Context(300, 3 * 1000, 5 * 60 * 1000);
}
chaifenService.setOut(out);
List list = chaifenService.doBatch(json.getString("esKey"), json);
if (ListUtil.isEmpty(list)) {
return;
}for (JSONObject result : list) {
out.collect(result.toJSONString());
}