mysql过期数据的清理方案(Java/springboot+mybatis)

比如说现在数据库表信息增加的很快,然后我们需要对每个表设置过期删除策略;
大概思路就是:定时任务调度,给每个表制定sql,然后执行删除数据的sql

//删除一个月前的数据
delete  FROM test_info WHERE create_time < DATE_SUB(CURDATE(), INTERVAL 1 MONTH);

那么我们是不是可以把这条sql 在项目中进行执行,我这里是springboot+mybatis演示:
我们将上述sql的参数都提出来做成变量,然后调用,这里提取出来四个变量:

  • table_name :表
  • column_name:依据列(通常为时间字段 具体可以看看DATE_SUB 支:持哪些 我这里的时间类型是DATETIME)
  • expired_num:过期num
  • expired_unit:过期单位(月,天 等)
    在这里插入图片描述
    还有更多时间单位

现在code一下:
主要逻辑:

//思路:
//1、将表的过期处理信息制作成json,传入(这里的json可以管理起来,甚至于是数据表/redis的value),这里演示就直接以json的形式
//2、遍历 :拿到每个表的参数,并调用mybatis的mapper(绑定了xml)
//3、做好参数校验,防止注入风险,因为我们这块业务不对外暴露,所以只需要做简单的校验
//4、此时该方法就可以做成接口,甚至于定时任务等形式来处理过期数据
//5、做成这样放在项目内好管理,当然也可以做python脚本等形式,主要就是sql的调用,并做成合理的链public void clearExpiredData() {try {String inputData = "[{\"table_name\":\"test_info\",\"column_name\":\"create_time\",\"expired_num\":\"4\",\"expired_unit\":\"MONTH\"}," +"{\"table_name\":\"test_info\",\"column_name\":\"create_time\",\"expired_num\":\"30\",\"expired_unit\":\"DAY\"}]";if (JSON.isValid(inputData)) {String tableNameFiled = "table_name";String columnNameFiled = "column_name";String expiredNumFiled = "expired_num";String expiredUnitFiled = "expired_unit";JSONArray jsonArray = JSON.parseArray(inputData);Iterator iterator = jsonArray.stream().iterator();while (iterator.hasNext()) {JSONObject next = (JSONObject) iterator.next();//校验包含特定的key,和过期单位必须是 DAY或者MONTH (mysql支持更多,但是这是业务)if (next.containsKey(tableNameFiled) && next.containsKey(columnNameFiled) && next.containsKey(expiredNumFiled) && next.containsKey(expiredUnitFiled)&& (Objects.equals(next.get(expiredUnitFiled), "DAY") || (Objects.equals(next.get(expiredUnitFiled), "MONTH")))) {String tableName = (String) next.get(tableNameFiled);String columnName = (String) next.get(columnNameFiled);String expiredNum = (String) next.get(expiredNumFiled);String expiredUnit = (String) next.get(expiredUnitFiled);int delExpiredDataNum = mysqlExpiredDataMapper.delExpiredData(tableName, columnName, Integer.parseInt(expiredNum), expiredUnit);log.info("del expired mysql data table:{},column:{},expired:{}:{},size:{}", tableName, columnName, expiredNum, expiredUnit, delExpiredDataNum);} else {log.warn("current JSONObject param loss:{}", next.toJSONString());}}} else {log.warn("valid error :{}", inputData);}} catch (Exception e) {e.printStackTrace();}}

mapper.java

@Repository
public interface MysqlExpiredDataMapper {int delExpiredData(@Param("table_name") String table, @Param("column_name") String column, @Param("expired_num") int expiredNum, @Param("expired_unit") String expiredUnit);
}

mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhidaohulian.analysis.mapper.MysqlExpiredDataMapper"><delete id="delExpiredData">deleteFROM ${table_name}WHERE ${column_name} &lt; DATE_SUB(CURDATE(), INTERVAL #{expired_num} ${expired_unit});</delete>
</mapper>

注意点:
1、${}和#{},的区别,是上面穿参数的关键;
2、&lt; 是小于号
3、存在sql注入的危险,所以要在调用的时候做好参数校验,如果业务没有暴露的情况,那么这是一个不错的方案;

如果方案有不成熟的地方,欢迎大佬指出,小子优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/164124.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++初阶--C++入门(2)

C入门&#xff08;1&#xff09;链接入口 文章目录 内联函数auto关键字注意事项 基于范围的for循环(C11)nullptr 内联函数 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提…

ND协议——无状态地址自动配置 (SLAAC)

参考学习&#xff1a;计算机网络 | 思科网络 | 无状态地址自动配置 (SLAAC) | 什么是SLAAC_瘦弱的皮卡丘的博客-CSDN博客 与 IPv4 类似&#xff0c;可以手动或动态配置 IPv6 全局单播地址。但是&#xff0c;动态分配 IPv6 全局单播地址有两种方法&#xff1a; 如图所示&#…

『C++ - STL』之优先级队列( priority_queue )

文章目录 前言优先级队列的结构优先级队列的模拟实现仿函数 最终代码 前言 什么是优先级队列&#xff0c;从该名中可以知道他一定有队列的一定属性&#xff0c;即先入先出(LILO)&#xff0c;而这里的优先级则可以判断出它的另一个特点就是可以按照一定的条件将符合该条件的先进…

移动设备管理对企业IT 安全的增强

移动设备管理 &#xff08;MDM&#xff09; 是通过定义策略和部署安全控制&#xff08;如移动应用程序管理、移动内容管理和条件 Exchange 访问&#xff09;来管理移动设备的过程。 完整的MDM解决方案可以管理在Android&#xff0c;iOS&#xff0c;Windows&#xff0c;macOS&a…

【论文解读】单目3D目标检测 DD3D(ICCV 2021)

本文分享单目3D目标检测&#xff0c;DD3D 模型的论文解读&#xff0c;了解它的设计思路&#xff0c;论文核心观点&#xff0c;模型结构&#xff0c;以及效果和性能。 一、DD3D简介 DD3D是一种端到端、单阶段的单目3D目标检测方法&#xff0c;它在训练时用到了点云数据&#xf…

索引失效的几种情况

目录 数据准备&#xff1a; 1、查询条件中有or&#xff0c;索引会失效&#xff1b; 2、like查询以%开头 3、如果类型为字符串&#xff0c;查询条件中数据需用引号引起来&#xff0c;否则不走索引&#xff1b; 4、索引列上参与计算会导致索引失效 5、违背最左匹配原则 6、…

[Hive] explode

在 Hive 中&#xff0c;explode 函数用于将数组&#xff08;Array&#xff09;或者Map类型的列拆分成多行&#xff0c; 每个元素或键值对为一行。这允许我们在查询中对数组或 Map 进行扁平化操作。 下面是使用 explode 函数的示例&#xff1a; 假设我们有一个包含数组字段的表…

面试知识点--基础篇

文章目录 前言一、排序1. 冒泡排序2. 选择排序3. 插入排序4. 快速单边循环排序5. 快速双边循环排序6. 二分查找 二、集合1.List2.Map 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、排序 1. 冒泡排序 冒泡排序就是把小的元素往前调或者把大…

flutter 创建插件

资料&#xff1a; flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…

22款奔驰S400L升级原厂360全景影像 倒车更加的安全

您是否经历过这种场面呢&#xff1f; 停车位&#xff0c;狭窄障碍停车困难 避免盲区&#xff0c;倒车盲区危及生命安全 狭窄路段&#xff0c;无法判断是否安全通过 视角盲区&#xff0c;小孩站在视野盲区看不到&#xff0c;Xjh15863 360度无缝3D全车可见&#xff0c;解决各…

uniapp开发多端应用项目时的常见跨端兼容处理

一、跨端兼容 每个端有每个端的特点&#xff0c;有的能被抹平&#xff0c;有的不可能被抹平。 跨端&#xff0c;不是把web的习惯迁移到全平台。而是按照uni的写法&#xff0c;然后全平台使用。 按照uniapp规范开发可以保证多平台兼容&#xff0c;但每个平台有自己的一些特性。…

02、MySQL-------主从复制

目录 七、MySql主从复制启动主从复制&#xff1a;原理&#xff1a;实现&#xff1a;1、创建节点2、创建数据库3、主从配置1、主节点2、从节点 4、测试&#xff1a;5、问题&#xff1a;1、uuid修改2、service_id3、读写不同步方法1&#xff1a;方法2&#xff1a; 七、MySql主从复…

【VR】【Unity】如何调整Quest2的隐藏系统时间日期

【背景】 网络虽然OK&#xff0c;但是Oculus Quest要连上商店还必须调整好系统时间&#xff0c;不过在Quest系统中&#xff0c;时间对用户是不可见的&#xff0c;本篇介绍调整的方法。 【方法】 打开SideQuest&#xff0c;没有的话先去下载一个。打开后先登录&#xff0c;如…

该方法仅能传入 lambda 表达式产生的合成类

说明&#xff1a;使用Mybatis-plus查询记录时&#xff0c;出现下面的错误&#xff1b; org.apache.ibatis.builder.BuilderException: Error evaluating expression ew.sqlSegment ! null and ew.sqlSegment ! and ew.nonEmptyOfWhere. Cause: org.apache.ibatis.ognl.OgnlEx…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

基于Python的车牌识别系统实现

目录 一、图像预处理 二、车牌区域定位 三、字符分割 四、字符识别 五、代码总结 随着人工智能和计算机视觉的不断发展&#xff0c;车牌识别系统成为了智能交通领域中的重要研究方向。Python作为一种流行的编程语言&#xff0c;具有易学易用、开发效率高等优点&#xff0c…

Unity 镜面反射

放置地板和模型 首先&#xff0c;让我们放置地板和将放置在其上的 3D 模型。这次&#xff0c;我使用 Plane 作为地板。从层次视图中选择“创建”→“3D 对象”→“平面”。我们还在地板上放置了 Unity-chan、Cube 和 Sphere。 接下来&#xff0c;创建地板的材质。在项目视图中…

01、MySQL-------性能优化

目录 一、影响性能的相关因素存储过程&#xff1a; 二、sql优化1>、Mysql系统架构2>、引擎区别&#xff1a; 3>、索引1、什么是索引&#xff1f;联合主键索引理解&#xff1a;索引长度理解&#xff1a;什么是慢查询&#xff1f; 1&#xff09;、索引理解2&#xff09;…

MSQL系列(六) Mysql实战-SQL语句优化

Mysql实战-SQL语句优化 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;以及索引最左侧匹配原则&#xff0c;Explain的用法&#xff0c;可以看到是否使用了索引&#xff0c;今天我们讲解一下SQL语句的优化及如何优化 文章目录 Mysql实战-SQL语句优化1.…

【Docker】Docker网络及容器间通信详解

目录 背景 默认网络 1、bridge 网络模式 2、host 网络模式 3、none 网络模式 4、container 网络模式 自定义网络 容器间网络通信 IP通信 Docker DNS server Joined容器 前言 本实验通过docker DNS server和joined 容器两种方法实现Docker容器间的通信。Docker容器间…