import lombok.extern.slf4j.Slf4j;
public abstract class AbstractClean {
protected abstract Integer expireDays();
private Integer defaultMinutes(){return 5;}
protected abstract void clean(String startDate, String endDate);
protected abstract Boolean checkHasData(String endDate);
protected abstract Date getLatestdEndDate(Date endDate);
public void execClean() {
Date endDate = previousDate(new Date(), expireDays());
startDate = subtractMinutes(endDate,defaultMinutes());
// 每次清理很短时间区间内的数据(目前是defaultMinutes()内的数据)
String startDateStr = formatYYMMDD(startDate);
String endDateStr = formatYYMMDD(endDate);
log.info("clean,startDate:{},endDate:{}",startDateStr,endDateStr);
clean(startDateStr, endDateStr);
if(!checkHasData(endDateStr)){
log.info("clean finished,startDate:{},endDate:{}",startDateStr,endDateStr);
// 获取索引中在限定条件下最大的时间。 以前推的开始时间作为条件
endDate = getLatestdEndDate(startDate);