mq消息日志记录表的数据如何删除?
每次查询7天前的500数据,根据id批量删除。
- 代码中用的elasticJob
@Slf4j
@Component
public class MessageLogDeleteJob implements SimpleJob {
@Autowired
private DataInterfaceReceiveMessageSteelmakingMapper dataInterfaceReceiveMessageSteelmakingMapper;
@Autowired
private DataInterfaceReceiveMessageRollingsteelMapper dataInterfaceReceiveMessageRollingsteelMapper;
@Override
public void execute(ShardingContext shardingContext) {
log.info("定时删除消息记录表任务开始执行");
// 保留一周的数据
LocalDateTime time = LocalDateTime.of(LocalDate.now().minusDays(8), LocalTime.of(23, 59, 59));
deleteRecords(time, dataInterfaceReceiveMessageSteelmakingMapper, "外部接口接收消息记录表(炼钢)");
deleteRecords(time, dataInterfaceReceiveMessageRollingsteelMapper, "外部接口接收消息记录表(轧钢)");
log.info("定时删除消息记录表任务结束执行");
}
/**
* 删除消息记录
*
* @param time 时间
* @param baseMapper mapper
* @param tableName 表名
* @since 2023/11/13 17:53
*/
private <M extends BaseMapper<T>, T extends DataInterfaceReceiveMessage> void deleteRecords(LocalDateTime time,
M baseMapper,
String tableName) {
int number = 0;
try {
while (true) {
List<Map<String, Object>> records = baseMapper.selectMaps(new QueryWrapper<T>()
.select("id")
.le("row_update_time", time)
.last("limit 500"));
if (CollectionUtils.isEmpty(records)) {
log.info("删除{}完成,删除条数:{}", tableName, number);
break;
}
List<String> ids = records.stream().map(item -> (String) item.get("id")).collect(Collectors.toList());
int rows = baseMapper.deleteBatchIds(ids);
log.info("删除{}:{}条记录", tableName, rows);
number = number + rows;
}
} catch (Exception e) {
log.error("删除{}失败,已经删除:{}条,失败原因:{}", tableName, number, e.getMessage(), e);
}
}
}
- 也可以用spring自带的定时任务
/**
* 定时删除消息记录表
*
* @author wuxiaochuan
* @version 1.0
* @since 2023/11/28 9:58
*/
@Slf4j
@Component
public class MessageLogDeleteJob {
@Autowired
private DataInterfaceReceiveMessagePlatMapper dataInterfaceReceiveMessagePlatMapper;
/**
* 定时删除消息记录表
*/
@Scheduled(cron = "0 0 2 * * ?")
public void messageLogDeleteJob() {
log.info("定时删除消息记录表任务开始执行");
// 保留一周的数据
LocalDateTime time = LocalDateTime.of(LocalDate.now().minusDays(8), LocalTime.of(23, 59, 59));
deleteRecords(time, dataInterfaceReceiveMessagePlatMapper, "外部接口接收消息记录表(ERP报表)");
log.info("定时删除消息记录表任务结束执行");
}
/**
* 删除消息记录
*
* @param time 时间
* @param baseMapper mapper
* @param tableName 表名
* @author wuxiaochuan
* @since 2023/11/28 9:58
*/
private <M extends BaseMapper<T>, T extends DataInterfaceReceiveMessage> void deleteRecords(LocalDateTime time,
M baseMapper,
String tableName) {
int number = 0;
try {
while (true) {
List<Map<String, Object>> records = baseMapper.selectMaps(new QueryWrapper<T>()
.select("id")
.le("row_update_time", time)
.last("limit 500"));
if (CollectionUtils.isEmpty(records)) {
log.info("删除{}完成,删除条数:{}", tableName, number);
break;
}
List<String> ids = records.stream().map(item -> (String) item.get("id")).collect(Collectors.toList());
int rows = baseMapper.deleteBatchIds(ids);
log.info("删除{}:{}条记录", tableName, rows);
number = number + rows;
}
} catch (Exception e) {
log.error("删除{}失败,已经删除:{}条,失败原因:{}", tableName, number, e.getMessage(), e);
}
}
}