我们现在大部分数据在执行删除操作时,大部分都是走的逻辑数据,也可以在适当的时候进行数据恢复.
但是有些逻辑删除太久的数据就可以去清掉了, 今天就整理了一套简单的定时清理过期数据.
首先是Mapper
/**
* <p>
* 清理数据 Mapper 接口
* </p>
*
* @author linnine09
* @since 2021-11-29
*/
public interface CleanDeletedMapper extends BaseMapper {
/**
* 定期清理逻辑删除的数据
* @param daysOverdue 过期天数
* @return
*/
Integer cleanDeleted(@Param("tab") String tableName,@Param("daysOverdue") Integer daysOverdue);
}
然后在CleanDeletedMapper.xml里写一个sql
<delete id="cleanDeleted">
delete from ${tab} where to_days(now())-to_days(create_time)>#{daysOverdue} and is_deleted=1 order by id desc
</delete>
定时任务类,一般是用户输入的一些信息会去删除数据比较多,这里只是简单的处理,大家根据自己的场景再细分,比如有的有图片数据,还要去把图片移除
@Component
@Slf4j
public class CleanDeletedTask {
@Resource
private CleanDeletedMapper mapper;
/**
* String 表名
* Integer 天数
*/
private static final Map<String,Integer> tabMap=new HashMap<>();
static {
//表名和过期天数
tabMap.put("table1",7);
tabMap.put("table2",3);
}
/**
* 凌晨3点执行
*/
@Scheduled(cron = "0 0 3 * * ? ")
public void updatePanoramaRedis(){
for (Map.Entry<String, Integer> entry : tabMap.entrySet()) {
try {
Integer count = mapper.cleanDeleted(entry.getKey(), entry.getValue());
log.info("清除逻辑删除数据,{}天过期{}数据{}条",entry.getValue(),entry.getKey(),count);
} catch (Exception e) {
log.error("清除{}逻辑删除数据时发生异常{}",entry.getKey(),e.getMessage());
}
}
}
}
|