• Springboot ruoyi配置mysql备份定时任务


    一、RuoYiConfig.class 新增获取备份路径方法
    1. public static String getDataBaseBackUp() {
    2. return getProfile() + "/dbBackUp";
    3. }
    二、RyTask:新增备份数据库方法
    mySqlDump方法:参数详见代码
    1. package com.ruoyi.quartz.task;
    2. import cn.hutool.core.collection.CollUtil;
    3. import cn.hutool.core.collection.ListUtil;
    4. import cn.hutool.core.date.DatePattern;
    5. import cn.hutool.core.date.DateUtil;
    6. import cn.hutool.core.io.FileUtil;
    7. import cn.hutool.core.util.NumberUtil;
    8. import cn.hutool.core.util.StrUtil;
    9. import cn.hutool.core.util.ZipUtil;
    10. import cn.hutool.system.OsInfo;
    11. import cn.hutool.system.SystemUtil;
    12. import com.ruoyi.common.config.RuoYiConfig;
    13. import org.springframework.beans.factory.annotation.Autowired;
    14. import org.springframework.stereotype.Component;
    15. import java.io.File;
    16. import java.util.Comparator;
    17. import java.util.Date;
    18. import java.util.List;
    19. import java.util.stream.Collectors;
    20. /**
    21. * 定时任务调度测试
    22. *
    23. * @author ruoyi
    24. */
    25. @Component("ryTask")
    26. public class RyTask {
    27. /**
    28. *
    29. * @param host:数据库Ip
    30. * @param port:数据库端口
    31. * @param username:数据库账号
    32. * @param password:数据库密码
    33. * @param databasename:数据库名称
    34. * @param backupNumStr:备份保留份数
    35. * @throws Exception
    36. */
    37. public void mySqlDump(String host, String port, String username, String password, String databasename,String backupNumStr) throws Exception {
    38. String dir = RuoYiConfig.getDataBaseBackUp();
    39. if (!FileUtil.exist(dir)) {
    40. FileUtil.mkdir(dir);
    41. }
    42. String sqlName = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_PATTERN)+ ".sql";
    43. String sqlPathName = dir + File.separator + sqlName;
    44. if (FileUtil.exist(sqlPathName)) {
    45. System.out.println(sqlName + "文件名已存在,请更换");
    46. return;
    47. }
    48. //拼接cmd命令 windows下 cmd Linux下 /bin/sh
    49. Process exec;
    50. OsInfo osInfo = SystemUtil.getOsInfo();
    51. //如果不能取得系统属性os.name(因为Java安全限制),则总是返回false
    52. if(osInfo.isWindows()){
    53. exec = Runtime.getRuntime().exec("cmd /c mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + databasename + " > " + sqlPathName);
    54. } else {
    55. exec = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "/usr/bin/mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + databasename + " > " + sqlPathName});
    56. }
    57. if (exec.waitFor() == 0) {
    58. System.out.println("数据库备份成功,备份路径为:" + sqlPathName);
    59. }
    60. //压缩
    61. String zipPathName = dir + File.separator + sqlName + ".zip";
    62. ZipUtil.zip(sqlPathName, zipPathName);
    63. //删除
    64. FileUtil.del(sqlPathName);
    65. //获取外部的备份保留份数
    66. int backupNum = 5;
    67. try {
    68. backupNum = NumberUtil.parseInt(backupNumStr);
    69. } catch (Exception e){
    70. System.out.println("backupNumStr非数字:"+backupNumStr);
    71. }
    72. //删除之前备份份数
    73. List<String> fileNames = FileUtil.listFileNames(dir);
    74. if(CollUtil.isNotEmpty(fileNames)){
    75. //从大到小排序
    76. fileNames = fileNames.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
    77. for (int i = 0; i < fileNames.size(); i++) {
    78. //超过的份数全删除
    79. if(i>=backupNum){
    80. FileUtil.del(dir + File.separator + fileNames.get(i));
    81. }
    82. }
    83. }
    84. }
    85. }

    三、配置定时任务

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

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

    四、执行效果

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

    上传路径都配置的:

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

  • 相关阅读:
    C#程序到底从哪里开始看,从Main函数开始,那么Main函数是什么?
    Java线程池理解与学习
    【MySQL系列】MySQL数据库索引详解
    Linux常用命令——cmp命令
    Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(上)
    Linux系统中使用汇编初始化外设方法
    Kafka(二) 生产者
    10个团建小游戏备选方案
    论文检测两次结果为什么不一样?
    bpf对内核的观测
  • 原文地址:https://blog.csdn.net/qq_26408545/article/details/133087305