在使用定时任务时,先根据条件查询出数据,然后对数据进行更新操作.出现BUG: 数据不知道,应该为74条数据,在分页查询时会出现查询数与实际条数不符情况. 归结原因为 : 第一次查询第一页后将数据状态修改,第二次查询第二页总页数变为2页,导致应该查询之前的第二页变为查询第三页,过滤了原第二页的数据导致.
解决办法: 使用循环,一直查询第一页
@Component
public class TrackLogQuartz implements SchedulingConfigurer {
private final Logger logger = Logger.getLogger(TrackLogQuartz.class);
@Value("${quartz.track.time}")
private String quartzTime;
@Autowired
private TrackService trackService;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(this::run, quartzTime);
}
private void run() {
int page = 0;
int pageSize = 500;
int count = 0;
logger.info("开启定时清理消息日志");
List<String> ids;
do {
ids = trackService.findByPage(page, pageSize);
if (CollectionUtils.isNotEmpty(ids)) {
count += trackService.deleteInId(ids);
}
} while (ids.size() >= pageSize);
logger.info("结束定时清理消息日志,共清理日志" + count + "条");
}