在使用定時任務時,先根據條件查詢出數據,然後對數據進行更新操作.出現BUG: 數據不知道,應該爲74條數據,在分頁查詢時會出現查詢數與實際條數不符情況. 歸結原因爲 : 多線程對查詢的結果進行了修改操作,導致查詢條件在查詢中改變導致.
解決辦法: 禁用分頁,只使用排序最新修改時間,取最新多少條數據.
@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 + "條");
}