定期逻辑备份表并删除表中记录,mybatis 动态传入表名, springboot schedule定时任务动态(从数据库读取)读取执行

mysql单个数据库备份和恢复、mysqldump、定时备份 mysql单个数据库备份和恢复,mysqldump 阅读详情


1.1 需求和大致思路

  要求把mysql的数据定时同步到另一个schema下,并清理数据,不同的表有不同的策略,如sys_operation_log表每个月调度一次备份数据并清理半年前的数据:
  采用springboot schedule定时任务动态(从数据库读取)读取执行

create table if not exists ddh_sbztjk_prod.dump_del
(
	id int not null
		primary key,
	originTable varchar(100) not null,
	desTable varchar(100) not null,
	primaryCol varchar(100) not null,
	delWhere varchar(100) not null,
	cron varchar(100) not null
);

在这里插入图片描述


    <select id="getMax" resultType="java.lang.Long" statementType="STATEMENT">
         select max(${col}) from ${des}.${desTable}
    </select>

    <insert id="insertToAnotherTable" statementType="STATEMENT">
        insert  into ${des}.${desTable} select * from ${origin}.${originTable}
        <where>
            <if test="colNum != null">
                ${col} > ${colNum}
            </if>
        </where>
    </insert>

    <delete id="del" statementType="STATEMENT">
        delete  from ${origin}.${originTable}   ${delWhere}
    </delete>

1.2 mybatis动态传入表名

在动态sql解析过程,#{}与${}的效果是不一样的:#{} 占位符    ${} 拼接符
   #{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,变量替换后,#{} 对应的变量自动加上单引号 ‘’

   ${ } 仅仅为一个纯粹的 string 替换,在动态 SQL 解析阶段将会进行变量替换,变量替换后, ${} 对应的变量不会加上单引号

注:

   ${}在预编译之前已经被变量替换了,这会存在sql注入风险
如

  select * from ${tableName} where name = ${name}

如果传入的参数tableName为user; delete user; --,那么sql动态解析之后,预编译之前的sql将变为:

  select * from user; delete user; -- where name = ?;

所以

${}一般用于传输数据库的表名、字段名等,能用#{}的地方尽量别用${}

1.3 springboot schedule定时任务动态(从数据库读取)读取执行

mybatisplus反向工程生成实体类DumpDel,以及mapper service

@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="DumpDel对象", description="")
public class DumpDel implements Serializable {

    private static final long serialVersionUID=1L;

    private Integer id;

    @TableField("originTable")
    private String originTable;

    @TableField("desTable")
    private String desTable;

    @TableField("primaryCol")
    private String primaryCol;

    @TableField("delWhere")
    private String delWhere;

    private String cron;


}

自定义实体类实现接口SchedulingConfigurer
在这里插入图片描述
重写configureTasks方法,向scheduledTaskRegistrar中添加任务,每个任务需要Runnable和Trigger
在这里插入图片描述
Runnable对应调度任务

Trigger对应cron表达式

@Component
public class DataRemoveSchedule implements SchedulingConfigurer {

    @Autowired
    private IDumpDelService dumpDelService;
    @Autowired
    private MyService myService;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        // 获取所有任务
        List<DumpDel> scheduleList = dumpDelService.list();
        for (DumpDel s : scheduleList) {
            scheduledTaskRegistrar.addTriggerTask(getRunnable(s), getTrigger(s));
        }
    }


    /**
     * runnable
     *
     * @param scheduleConfig
     * @return
     */
    private Runnable getRunnable(DumpDel scheduleConfig) {
        return new Runnable() {
            @Override
            public void run() {
                myService.insertToAnotherTableAndDel(scheduleConfig.getOriginTable(), scheduleConfig.getDesTable(), scheduleConfig.getPrimaryCol(), scheduleConfig.getDelWhere());
            }
        };
    }

    /**
     * Trigger
     *
     * @param scheduleConfig
     * @return
     */
    private Trigger getTrigger(DumpDel scheduleConfig) {
        return new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                CronTrigger trigger = new CronTrigger(scheduleConfig.getCron());
                Date nextExec = trigger.nextExecutionTime(triggerContext);
                return nextExec;
            }
        };

    }
}
springboot通过mybatis的插件实现自动创建或更新表 今天在一个博客看到的关于引入mybatis的插件actable实现自动创建或者更新表,然后我就照着他的博客做了,但还是踩了很多坑,因为很多东西他都没有说清楚。很无奈,下面贴上我自己的代码。这个插件目前只支持mysql。 首先需要引入三个依赖,第一个依赖是ACtable的依赖,其他两个是支持它的依赖(原博主只丢出了一个依赖,我在这踩了个坑,一直报错bean无法注入): pom.xml: &amp;amp;lt;!-... 阅读详情

相关推荐

MySQL自动备份:实现数据库定期自动备份的方法

定期备份可以提供数据的安全保护,同时备份文件的管理和恢复也是非常重要的。MySQL是一款常用的关系型数据库管理系统,对于重要的数据,定期进行备份是非常重要的。该命令可以导出整个数据库或者指定的表,生成一个SQL脚本文件,包含数据库的结构和数据。例如,你可以编写一个脚本来删除过期的备份文件,只保留最近几天或几周的备份文件。定期自动备份会生成大量的备份文件,为了管理这些文件,可以使用一些策略进行文件的清理和归档。将上述脚本保存为一个文件,然后使用cron定时任务来定期执行该脚本,以删除过期的备份文件。

CsmbPascal的博客 1104

mybatis 学习备份

Mybatis 7种 3种 jdbc 1.JDBC回顾 1.1.创建mybatis库,执行sql SQL文件: 执行后: tb_user表: 1.2.创建maven工程 右键—&gt;new–&gt;Project 选择:Maven—&gt;Maven Project 坐标: 1.3.引入mysql依赖包 Pom.xml内容: 4.0.0 cn.itcast.parent itcast-par...

tangiwang的博客 2025

因果表示学习 (Causal Representation Learning, CRL)

传统的机器学习,尤其是深度学习,非常擅长学习数据中的相关性 (Correlation)。但它常常会走“捷径”,学到一些虚假的、不稳定的“表面联系”。一个AI模型在学习识别“牛”时,如果训练数据里所有的牛都在绿色的草地上,模型很可能会学到一个错误的规则:“牛 = 四条腿的生物 + 绿色背景”。你给它一张牛在海滩上的照片,它就可能不认识了。因果表示学习的目标,就是让模型超越这种表面相关性,去学习数据背后。

Xuxiansir的博客 1181

mybatis实现数据的备份

注意:代码风格不规范,轻点喷。

qq_45035725的博客 754

Win10 桌面回收站右键没有“清空回收站”选项怎么解决

Win10 桌面回收站右键没有“清空回收站” 选项怎么解决? 我之前不知道怎么捣鼓注册表(胡乱删了一些。。。) 导致想清空回收站的时候,右键却没有“清空回收站”这个选项了 以下是解决方法: 1、在桌面上新建一个txt文本文档,将以下代码拷贝进去: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\empty] "Com...

菜鸟的后花园 2万+

手把手教你解决Keil5安装时xerces-c_3_0.dll缺失和0xc000007b报错(附文件下载与路径设置)

本文详细解析了Keil5安装过程中常见的xerces-c_3_0.dll缺失和0xc000007b报错问题,提供了从文件获取、路径设置到系统配置的完整解决方案。同时,文章还涵盖了STM32开发环境的搭建技巧和最佳实践,帮助开发者快速构建稳定的嵌入式开发环境。

weixin_29164497的博客 600

【课程设计】基于springboot电竞赛事与赞助管理系统-计算机毕设 附源码 49766

电竞赛事与赞助管理系统旨在为普通用户、赞助用户、队长用户及管理员提供一个全面、高效、便捷的电竞管理平台。以下是该系统的功能需求分析: 1.普通用户功能需求分析: 登录注册:用户可以方便地登录或注册系统账户,享受个性化服务。 首页:首页展示了系统的核心功能与最新赛事资讯,方便用户快速了解系统动态。 赛事公告:用户可以在此查看系统发布的赛事相关公告,确保不遗漏重要信息。 赛事资讯:提供丰富的赛事新闻与深度分析,帮助用户更好地了解电竞行业动态。 热门战队:展示当前受欢迎的战队信息,包括成员介绍、历史战绩等。 赛事

VXbishe的博客 561

CCD成像原理以及机器视觉中的相机选型

CCD成像原理以及机器视觉中的相机选型 近年来,随着人工智能的高速发展和图像处理技术的日益成熟,机器视觉在自动化领域发挥着越来越大的作用。机器视觉被用于代替人工视觉,使机器人能够完成以往只有人工才能完成的任务,这大大减少了在危险环境下工作的风险。同时,在来料无序或工作环境杂乱的情况下,机器视觉可以显著提高生产效率和自动化柔性程度。随着人们对工业设计水平和生产效率需求的日益提高,机器视觉正在逐步代替传统复杂繁琐的自动化模式,成为当今的主要发展趋势。 机器视觉是一项综合的技术,包括数字图像处理,传感器,光学

cszn6666的博客 5570

【课程设计】基于springboot 的二手闲置交易平台系统 计算机毕业设计源码29594

普通用户可以注册登录、浏览商品、收藏感兴趣的商品、查看订单状态及进行评论管理等操作;卖家用户则能够通过后台管理系统高效地上架、编辑商品,处理订单和提供售后服务;管理员负责系统的整体维护,包括用户管理、举报反馈处理、资源管理和商城管理等,确保平台运行的公正性和透明度.....

Biye_Design的博客 1万+

IDEA集成selenium自动化测试(Java+Selenuim+testNG+Maven)

文章目录写在前面01 | 新建Maven项目02 | idea集成Selenium03 | 写在前面 因为软件测试的需求和博主比较经常使用Java,于是,想在Idea中集成selenuim,用Java编写测试代码,因此有了这篇文章来记录一下过程。 资源指路: java使用selenium实现模拟浏览器操作API大全 模拟登录 TestNG入门教程 感谢上面博客的大佬。 01 | 新建Maven项目 不使用骨架创建,直接点击左侧Maven,然后一路next即可。 02 | idea集成Sele

aLinxi的博客 8279

PyTorch 面试题及详细答案120题(54-70)-- 模型训练与评估

本文介绍了PyTorch模型训练的基本流程和核心概念。主要内容包括: 模型训练基本流程:通过代码示例展示了数据准备、模型定义、损失函数和优化器选择、训练循环(前向传播、反向传播、参数更新)的完整过程,并包含验证集评估的实现。 训练过程中的关键概念: Epoch:完整遍历一次训练集 Batch:将数据分成小批次 Iteration:一个Batch的参数更新过程 三者关系:1 Epoch = N/B Batch = N/B Iteration(N为样本数,B为batch_size) PyTorch数据加载机制:

大剑师兰特的GIS世界 488

147.【2024Java八股-全网最全-10w字】

eg: 学校、院校、经验、年龄、跳槽频率…基本包括16种常见使用场景: 、数据共享分布式、、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.详细讲解16种使用场景: https://blog.youkuaiyun.com/zxl646801924/article/details/123202381用户使用id进行查询文章的时候,首先会查询redis数据库,如果在redis中命中数据,那么redis就向用户返回查询的结果

qq_69683957的博客 1736

信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算1(知识地图:同余、裴蜀定理、扩展欧几里得、乘法逆元、分数模运算)

信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算1(知识地图:同余、裴蜀定理、扩展欧几里得、乘法逆元、分数模运算)

王老师青少年编程 790

Java秋招八股之王——拿不到大厂Offer来找我(全文14w字,持续更新)

如果你需要一套八股文,想要一套八股文解决秋招的大部分问题,来看看这篇文章吧~内容包含数据结构、计算机网络、数据库、Redis、消息队列、JavaSE、JVM、JUC、海量数据题目、高并发场景、项目的亮点难点、ssm框架、dubbo框架等等。这是我整个秋招不停面试的总结和反思,最后也是靠它拿到了菜鸟的offer,希望会对后面秋招的朋友起到一些帮助。

qq_40460454的博客 1291

用群辉NAS打造影视墙(Jellyfin篇)

之前的文章提到过,用群辉NAS组建影视播放系统可以采用官方提供的Video Station套件,不过影视信息配比较差,响应速度也欠佳,今天我们就聊聊别的套件。在影音媒体方面,常见的还有Emby、Plex、Jellyfin。本文主讲Jellfin的原因是它胜在免费,而且功能比较齐全,完全够用。详细信息可以参考Jellyfin的官网:https://jellyfin.org/

dgnankai的专栏 7322

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java 后台管理系统 数据备份与恢复springboot+mybatisPlus

检查mysql环境变量部分字符串用hutool工具类校验。

cyx410423的博客 1220

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mybatis第二天

1> 课堂案例做一遍2> 备份emp表,表明 emp_bak;查询方法 List(String tabname,String firstname,String email,int max,int min):传入表名,是从原表中获取数据还是从备份的表中获取数据List(String tabname,String firstname,String email,int max,int min) List(Map map);3>用户登录信息和用户基本信息[一对一的关系]用户登录,同时获取用户的基本信息Users f

weixin_53050118的博客 365

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MyBatis的数据库备份与恢复策略

1.背景介绍 1. 背景介绍 MyBatis是一款流行的Java持久层框架,它可以简化数据库操作,提高开发效率。在实际应用中,我们需要对数据库进行备份和恢复操作,以保护数据的安全性和可靠性。本文将详细介绍MyBatis的数据库备份与恢复策略,并提供实际应用场景和最佳实践。 2. 核心概念与联系 在MyBatis中,数据库备份与恢复主要依赖于以下几个核心概念: 数据源(DataSourc...

AI天才研究院 1148

mybatis备份mysql_mysql备份与还原操作手册

一、备份常用操作基本命令1、备份命令mysqldump格式格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql2、备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。mysqldump --add-drop-table -uusername -pp...

weixin_30697437的博客 1513

Springboot 通过Schedule实现定时任务动态读取执行(从数据库读取)

前言:1、利用反射机制实现。 2、通过实现SchedulingConfigurer来配置定时任务。 3、此种方式只能实现项目启动时,定时任务执行,不能再项目启动后开启、暂停任务。 效果: 数据库中配置了2个任务(状态都是开启的,如果不想执行某条任务,可以将状态改为1) 表结构: CREATE TABLE `schedule_setting` ( `id` int(11) NOT NULL AUTO_IN...

qq_36357608的博客 5014

MyBatis-【1】配置

1、再安全的保障,也都有万一,数据库的备份必不可少 【1】首先我们要根据数据库配置写.sh文件,用于定时执行备份。 【2】cd /usr/bin&&./mysqldump -hlocalhost -u'你的数据库名称'-p'你的数据库密码'mydb>/root/DBBackup/$(date +%Y%m%d).bak&&cd /root; 2、修改.sh文件的执行权限与执行.sh文件 【1】chmod 777 文件名.sh 【2】./文件名.sh执行完毕后..

p6448777的博客 234

从数据库获取值设置@Scheduled cron的值(springboot)

我正在使用,Spring Boot并且在调度cron task数据库中存在的使用值时遇到问题。 目前,我正在从属性文件中读取值,如下所示: @Scheduled(cron= "${time.export.cron}") public void performJob() throws Exception { // do something } 这很好用,但是我不想从属性文件中获取值,而是想从数据库表中获取它们。有可能吗? Vignesh: 您可以在SpringBootApplic..

qq_34792830的博客 6010

【Java】MyBatis-Plus配置,备份

一、前提依赖 1、假设项目为SpringBoot 2、假设项目为SpringBoot版本为2.1.0.RELEASE或更高 二、依赖配置 1、Maven依赖 <!--<dependency>--> <!--<groupId>org.mybatis.spring.boot</groupId>--> <!--<artifactId>mybatis-spring-boot-st

hgSuper的博客 1000

SpringBoot Scheduled实现定时任务和配合数据库动态执行任务

1.依赖只需要parent 和web <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.14.RELEASE&lt...

zhangshengqiang168的博客 1436

mysql定时备份指定表

#!/bin/bash # 初始化时,创建相应目录 # mkdir /home/node/bakmysql/sql/daily # 定时任务 # 每天凌晨1:00执行全量备份脚本 #0 1 * * * /bin/bash -x /home/node/bakmysql/mysqlFullBack.sh >/dev/null 2>&1 #2分钟运行一次-测试用 #*/2 * * ...

wuli华仔的博客 1729

MySQL定时备份数据库(全库备份)

转载自:https://www.cnblogs.com/letcafe/p/mysqlautodump.html MySQL定时备份数据库(全库备份) 一、MySQL数据备份 1.1、 mysqldump命令备份数据 在MySQL中提供了命令行导出数据库数据以及文件的一种方便的工具mysqldump,我们可以通过命令行直接实现数据库内容的导出dump,首先我们简单了解一下mysqldump命令用法: #MySQLdump常用 mysqldump -u root -p --databases 数据

qq_29216579的博客 4151
上一篇: redis 8.Redis持久化之RDB (如何触发RDB快照;rdb备份恢复)
下一篇: redis 9.Redis持久化之AOF (AOF和RDB同时开启统默认取AOF的数据、AOF启动/修复/恢复), redis如何选择使用哪种持久化方式 ?
但行益事莫问前程
但行益事莫问前程 新星创作者: 数据库技术领域 新星创作者: 数据库技术领域
博客等级 码龄7年 8490粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值