Springboot ruoyi配置mysql备份定时任务

news2024/11/17 23:37:37
一、RuoYiConfig.class 新增获取备份路径方法
public static String getDataBaseBackUp() {
        return getProfile() + "/dbBackUp";
    }
二、RyTask:新增备份数据库方法
mySqlDump方法:参数详见代码
package com.ruoyi.quartz.task;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import cn.hutool.system.OsInfo;
import cn.hutool.system.SystemUtil;
import com.ruoyi.common.config.RuoYiConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 定时任务调度测试
 *
 * @author ruoyi
 */
@Component("ryTask")
public class RyTask {
    /**
     *
     * @param host:数据库Ip
     * @param port:数据库端口
     * @param username:数据库账号
     * @param password:数据库密码
     * @param databasename:数据库名称
     * @param backupNumStr:备份保留份数
     * @throws Exception
     */
    public void mySqlDump(String host, String port, String username, String password, String databasename,String backupNumStr) throws Exception {

        String dir = RuoYiConfig.getDataBaseBackUp();
        if (!FileUtil.exist(dir)) {
            FileUtil.mkdir(dir);
        }

        String sqlName = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN)+ ".sql";
        String sqlPathName = dir + File.separator + sqlName;
        if (FileUtil.exist(sqlPathName)) {
            System.out.println(sqlName + "文件名已存在,请更换");
            return;
        }

        //拼接cmd命令  windows下 cmd   Linux下 /bin/sh
        Process exec;
        OsInfo osInfo = SystemUtil.getOsInfo();
        //如果不能取得系统属性os.name(因为Java安全限制),则总是返回false
        if(osInfo.isWindows()){
            exec = Runtime.getRuntime().exec("cmd /c mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + databasename + " > " + sqlPathName);
        } else {
            exec = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "/usr/bin/mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + databasename + " > " + sqlPathName});
        }
        if (exec.waitFor() == 0) {
            System.out.println("数据库备份成功,备份路径为:" + sqlPathName);
        }

        //压缩
        String zipPathName = dir + File.separator + sqlName + ".zip";
        ZipUtil.zip(sqlPathName, zipPathName);
        //删除
        FileUtil.del(sqlPathName);

        //获取外部的备份保留份数
        int backupNum = 5;
        try {
            backupNum = NumberUtil.parseInt(backupNumStr);
        } catch (Exception e){
            System.out.println("backupNumStr非数字:"+backupNumStr);
        }

        //删除之前备份份数
        List<String> fileNames = FileUtil.listFileNames(dir);
        if(CollUtil.isNotEmpty(fileNames)){
            //从大到小排序
            fileNames = fileNames.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
            for (int i = 0; i < fileNames.size(); i++) {
                //超过的份数全删除
                if(i>=backupNum){
                    FileUtil.del(dir + File.separator + fileNames.get(i));
                }
            }
        }

    }
}

三、配置定时任务

其中7代表:备份保留的份数,默认是5份(假设传入的不能转成数字)

ryTask.mySqlDump('127.0.0.1','3306','数据库账号','数据库密码','数据库','7')

四、执行效果

方法调用hutool压缩方法、文件扫描、删除方法,测试均通过

上传路径都配置的:

/data/项目名(非中文)/uploadPath

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧工地4G+蓝牙+GPS/北斗RTK人员定位系统解决方案

工地是事故多发地&#xff0c;对工地人员进行定位管理非常有必要。传统工地管理手段存在局限性&#xff0c;往往难以高效地管理工地上的人员。随着科技的发展&#xff0c;工地人员定位管理系统逐渐普及。通过使用人员定位系统&#xff0c;工地管理者可以对工地上的人员进行全面…

对权限的理解和使用

目录 一&#xff1a;用户权限&#xff1a; ★su命令 ★sudo命令 二&#xff1a;文件权限 ★文件的类型权限 ★文件夹的权限的使用 ▲文件夹的可读权限&#xff1a; ▲文件夹的可写权限&#xff1a; ▲文件夹的可执行权限&#xff1a; ★权限的修改操作 ▲chmod命令 ★对于文件的…

C++:deque的概念以及stack和queue的模拟实现

文章目录 stack的模拟实现dequequeue的模拟实现 本篇主要总结的是stack和queue的模拟实现以及deque的原理 stack的模拟实现 和前面的模拟实现相同&#xff0c;首先要看官方实现的功能 这里引入了Container的概念&#xff0c;从字面意思来看&#xff0c;也就是说&#xff0c;在…

pdf转换成word,这里有几个不错的方法

pdf转换成word怎么转&#xff1f;大家都知道&#xff0c;在电脑进行各种文件格式转换中&#xff0c;PDF转换为Word文档的需求量应该是最大的。在我们的日常工作中&#xff0c;经常需要将PDF转换为Word格式。为什么要将pdf文件转换成word&#xff0c;相信大家也都应该知道的&…

图解 | 这就是网络

你是一台电脑&#xff0c;你的名字叫 A 很久很久之前&#xff0c;你不与任何其他电脑相连接&#xff0c;孤苦伶仃。 直到有一天&#xff0c;你希望与另一台电脑 B 建立通信&#xff0c;于是你们各开了一个网口&#xff0c;用一根网线连接了起来。 用一根网线连接起来怎么就能&q…

二叉树链式结构基础

一、前中后序遍历 1、前序遍历&#xff1a;前序遍历是采用 根 - 左子树 - 右子树 的顺序遍历二叉树。 也就是把整棵树分为一个个子问题&#xff0c;每个结点都可以看作 根、左子树、右子树 三个部分 (左右子树可以为空&#xff0c;就是单节点&#xff0c;根为空就表示探索完成&…

自动化测试需知的4项测试工具!

一般来说学自动化会建议大家先学selenium&#xff0c;因为最早的时候&#xff0c;自动化就代表selenium&#xff0c;进入测试行业就开始做接口测试&#xff0c;而且现在基本每个公司都需要接口测试。今天就和大家聊一下接口测试的工具。 一、Robot Framework 机器人框架。之所…

利用证书给pdf文件添加数字签名

文章目录 给pdf文件签名文件准备构建印章获取证书方法一 阿里云申请证书方法二 自建证书 利用证书给pdf签名在指定位置签名在指定坐标签名在指定签名域签名 给pdf文件签名 如何给pdf文件签名&#xff0c;这样pdf文件就具有不可修改性&#xff0c;具有鉴权、完整性、不可抵赖。…

【操作系统笔记】内存寻址

物理寻址 主存&#xff08;内存&#xff09; 计算机主存也可以称为物理内存&#xff0c;内存可以看成由若干个连续字节大小的单元组成的数组每个字节都有一个唯一的物理地址&#xff08;Physical Address&#xff09;CPU访问内存前&#xff0c;先拿到内存地址&#xff0c;然后…

通讯网关软件005——利用CommGate X2OPC实现OPC客户端访问MS SQL服务器

本文推荐利用CommGate X2OPC实现OPC客户端访问MS SQL服务器获取数据。CommGate X2OPC是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;上位机通过OPC Client软件来获取MS SQL数据库的数据。 …

Qt扩展-KDDockWidgets 简介及配置

Qt扩展-KDDockWidgets 简介及配置] 一、概述二、编译 KDDockWidgets 库1. Cmake Gui 中选择源文件和编译后的路径2. 点击Config&#xff0c;配置好编译器3. 点击Generate4. 在存放编译的文件夹输入如下命令开始编译 三、qmake 配置 一、概述 kdockwidgets是一个由KDAB组织编写…

基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Pycharm 环境Scikit-learnt 模块实现1. 数据预处理2. 客流预测3. 百度地图API调用4. GUI界面设计1&#xff09;手绘地图导入2&#xff09;下拉菜单设计3&#xff09;复选框设计4&#xff09;最短路径结果输出界面…

睿趣科技:抖音开一家网店大概什么时候回本

随着移动互联网的迅猛发展&#xff0c;社交媒体平台如抖音成为了商家推广产品和服务的热门渠道之一。许多人都希望能够通过在抖音上宣传自己的产品&#xff0c;甚至考虑开一家网店&#xff0c;但回本的时间是一个关键问题。本文将探讨抖音开一家网店大概什么时候回本的问题。 首…

calloc

目录 前提须知&#xff1a; 函数介绍&#xff1a; 原型如下&#xff1a; 申请空间&#xff1a; 判断是否申请成功&#xff1a; 释放空间&#xff1a; calloc与malloc的相同之处与不同之处&#xff1a; 相同之处&#xff1a; 不同之处&#xff1a; 举例&#xff1a; ca…

API接口知识小结及电商数据平台商品详情接口请求案例

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

无涯教程-JavaScript - SUMXMY2函数

描述 SUMXMY2函数返回两个数组中相应值的差的平方和。 语法 SUMXMY2 (array_x, array_y)争论 Argument描述Required/OptionalArray_xThe first array or range of values.RequiredArray_yThe second array or range of values.Required Notes 参数应为数字或名称,数组或包…

Vite前端构建工具详解

Vite前端构建工具 Vite 是一款新兴的前端构建工具&#xff0c;它的出现带来了前端开发体验的革命性变化。本文将介绍 Vite 的基本概念和核心特性&#xff0c;并通过代码实例来演示其强大功能。 什么是 Vite&#xff1f; Vite 是由 Evan You&#xff08;Vue.js 的创始人&#x…

掌握进度管理基本指南,保证项目不延期

项目管理中的进度管理是规划、制定、控制和监控项目时间表的过程&#xff0c;确保任务和活动按时完成。 假设你是一名项目经理&#xff0c;带着团队组织一场备受瞩目的音乐节。精确的时间安排是关键。你需要确保演出者准时到达并按计划表演&#xff0c;所有供应商都准备就绪&a…

「干货」洁净室悬浮粒子计数器全部常见型号参数汇总

我们的人体工程学设计轻巧的Lighthouse手持式3016-IAQ是市场上先进的手持式粒子计数器&#xff0c;其质量浓度模式的密度约为μg/ m3。Lighthouse手持式粒子计数器最多可提供6个粒径同时计数的通道&#xff0c;可在快速&#xff0c;易于阅读的彩色触摸屏上显示累积和差分粒子计…

推荐一个可以采集众多国内外电商网站数据的工具

淘宝API 接入地址 item_get 获得淘宝商品详情item_get_pro 获得淘宝商品详情高级版item_review 获得淘宝商品评论item_fee 获得淘宝商品快递费用item_password 获得淘口令真实urlitem_list_updown 批量获得淘宝商品上下架时间seller_info 获得淘宝店铺详情item_search 按关键…