当前位置: 首页 > news >正文

springboot对数据库进行备份+对一个文件夹内的文件按时间排序,只保留最近的8个文件

首先,对数据库进行备份,用到的命令:

mysqldump --opt -h 192.168.1.200 --user=root --password=xxx --result-file=E://data//20240911141400.sql --default-character-set=utf8 xxx(数据库名)

直接上代码

配置文件部分代码

代码部分两个类

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;@Component
public class BackUpDataBaseManager {@Value("${spring.datasource.driver-class-name}")private String driverClassName;@Value("${spring.datasource.url}")private String url;@Value("${spring.datasource.username}")private String userName;@Value("${spring.datasource.password}")private String password;@Value("${data.url}")private String sqlPath;/*** 获取数据库名*/public String getDataBaseName() {return url.substring(url.indexOf("3306"), url.indexOf("?")).replaceAll("/", "").replaceAll("3306", "");}/*** 获取主机地址*/private String getHost() {return url.substring(url.indexOf("mysql"), url.indexOf("3306")).replace(":", "").replace("//", "").replace("mysql", "");}/*** 导出 sql 并返回相关信息*/public void exportSql(String time) {// 指定导出的 sql 存放的文件夹File saveFile = new File(sqlPath);if (!saveFile.exists()) {saveFile.mkdirs();}String host = getHost();String dataBaseName = getDataBaseName();//创建当月的文件夹String fileName = time + ".sql";StringBuilder sb = new StringBuilder();// 拼接备份命令sb.append("mysqldump").append(" --opt").append(" -h ").append(host).append(" --user=").append(userName).append(" --password=").append(password);sb.append(" --result-file=").append(sqlPath + fileName).append(" --default-character-set=utf8 ").append(dataBaseName);try {System.out.println("执行语句:" + sb.toString());Process exec = Runtime.getRuntime().exec(sb.toString());if (exec.waitFor() == 0) {//删除前期的文件this.deleteDir();System.out.println("数据库备份成功,保存路径:" + sqlPath);} else {System.out.println("process.waitFor()=" + exec.waitFor());}} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {System.out.println("备份 数据库 出现 线程中断异常 ");} catch (Exception e) {System.out.println("备份 数据库 出现 其他异常 ");}}/*** @Description: 循环文件夹下的文件,删除指定的文件* @param* @author zlw* @date 2024/9/11 11:21*/public void deleteDir() {// 替换为你的文件夹路径String folderPath = sqlPath;// 要保留的最新文件数量int numberToKeep = 8;File folder = new File(folderPath);File[] files = folder.listFiles();if (files != null) {List<File> fileList = Arrays.asList(files);SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");//list倒序排列fileList.sort((f1, f2) -> {Date d1 = null;Date d2 = null;try {d1 = sdf.parse(extractDateTime(f1.getName()));d2 = sdf.parse(extractDateTime(f2.getName()));} catch (Exception e) {e.printStackTrace();}return d1.compareTo(d2);});System.out.println("fileList的数据是"+fileList);for (int i = 0; i < fileList.size() - numberToKeep; i++) {fileList.get(i).delete();}}}private static String extractDateTime(String fileName) {// 假设文件名的前14个字符包含日期时间信息return fileName.length() >= 14 ? fileName.substring(0, 14) : "";}
}

定时任务的类

public class ScheduledTasks {private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");@Autowiredprivate BackUpDataBaseManager backUpDataBaseManager;/*** 每天下午4点50分30秒执行*/// 每一分钟执行一次
//     @Scheduled(cron = "0 0/1 * * * ? ")//每周三和周日上午9点执行去备份数据库@Scheduled(cron = "0 0 9 ? * WED,SUN")public void reportCurrentTime() {String format = dateFormat.format(System.currentTimeMillis());System.out.println("The time is now {}"+format);backUpDataBaseManager.exportSql(format);}}

执行结果:

会定时删除一个月前的数据,只保留最近一个月的数据库备份文件

http://www.lryc.cn/news/437809.html

相关文章:

  • 【软考中级攻略站】-软件设计师(4)-计算机网络基础
  • Android以及IoT设备传感器软件开发总结
  • Vue2/Vue3中编程式路由导航实践总结
  • 【nginx】ngx_http_proxy_connect_module 正向代理
  • 单考一个OCP认证?还是OCP和OCM认证都要考?
  • 在Spring官网查看Springboot与Java的版本对应关系
  • HarmonyOS学习(十二)——数据管理(一)分布式数据
  • 3D GS 测试自己的数据
  • 攻防世界 supersqli
  • OceanBase 运维管理工具 OCP 4.x 升级:聚焦高可用、易用性及可观测性
  • HarmonyOS应用开发( Beta5.0)HOS-用户认证服务:面部识别
  • 解决Docker镜像不可下载
  • 考研报名确认上传身份证户口本学历证明照片如何压缩裁剪
  • DolphinScheduler应用实战笔记
  • IThenticate查重为何成为英语期刊论文投稿首选工具
  • C++ 在项目中使用Git
  • Python(TensorFlow和PyTorch)及C++注意力网络导图
  • 选择firewalld还是iptables
  • C到C++入门基础知识
  • Aigtek功率放大器的主要参数有什么
  • 运维工程师概述及职责
  • Android系统dumpsys命令详解
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第二集:通过InControl插件实现绑定玩家输入以及制作小骑士移动空闲动画
  • 基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)
  • 基于SpringBoot+Vue的校内跑腿业务管理系统
  • 嵌入式鸿蒙系统开发语言与开发方法分析
  • SpringBoot开发——整合Spring Data MongoDB
  • camouflaged object detection中的decoder最核心的作用
  • Java volatile
  • 一条sql是如何执行的详解