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);}}
执行结果:


会定时删除一个月前的数据,只保留最近一个月的数据库备份文件
相关文章:
springboot对数据库进行备份+对一个文件夹内的文件按时间排序,只保留最近的8个文件
首先,对数据库进行备份,用到的命令: mysqldump --opt -h 192.168.1.200 --userroot --passwordxxx --result-fileE://data//20240911141400.sql --default-character-setutf8 xxx(数据库名) 直接上代码 配置文件部分…...
【软考中级攻略站】-软件设计师(4)-计算机网络基础
计算机网络的分类 1. 局域网(Local Area Network, LAN) 局域网是指在一个较小的地理区域内连接的计算机网络,比如学校的机房、公司的办公室或者家里的Wi-Fi网络。在这个网络内的计算机可以直接相互通信,速度很快,延迟…...
Android以及IoT设备传感器软件开发总结
1 传感器选型 1.1 传感器选型 6 axis:Bosch BMI160(比较差),InvenSense MPU6050(DMP),ST LSM6Dxx Acc: Freescale MMA7450L (MicroMachined Accelerometer/MC Multi-Axis, iMX31), Kionix KXSD9…...
Vue2/Vue3中编程式路由导航实践总结
【1】Vue2编程式路由导航 ① router.push 除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。 router.push(location, onComplete?, onAbort?)注意:在 Vue 实例内部&#…...
【nginx】ngx_http_proxy_connect_module 正向代理
50.65无法访问 服务器, (403 错误) 50.196 可以访问服务器。 那么,配置65 通过196 访问。 需要一个nginx作为代理 【nginx】搭配okhttp 配置反向代理 发送原生的nginx是不支持okhttp的CONNECT请求的。 大神竟然给出了一个java工程 GINX编译ngx_http_proxy_connect_module及做…...
单考一个OCP认证?还是OCP和OCM认证都要考?
Oracle的OCP认证是数据库行业非常经典的一个认证,从事数据库行业的人都建考一个 Oracle OCP 认证。 OCP认证内容包括: OCA部分:数据库基础知识、SQL 语言使用、基本的数据库管理技能等,如数据库安装与配置、理解数据库架构、…...
在Spring官网查看Springboot与Java的版本对应关系
查看Spring Boot与Java的版本对应关系,可以按照以下步骤操作: 访问Spring官方网站,进入Spring Boot项目页面。可以通过点击菜单中的“Projects”,然后选择“Spring Boot”来访问。Spring | Home 在Spring Boot的LEARN页签中&…...
HarmonyOS学习(十二)——数据管理(一)分布式数据
文章目录 1、分布式数据服务概述2、KV数据模型(键值对数据库)3、分布式数据服务的约束和限制4、接口说明5、分布式数据服务开发步骤5.1、导入模块5.2、构造分布式数据库管理类实例5.3、获取、创建分布式数据库5.4、订阅分布式数据库的数据变化5.5、插入数…...
3D GS 测试自己的数据
环境配置 win11 vs2019cuda11.8driver522.06python3.10pytorch 2.4.0colmap3.8(可选,用于将图像生成点云) 安装 1 minicodagit 略 2 vs2019 在装cuda前安装, 选择c桌面开发即可, 环境变量path中配置C:\Program…...
攻防世界 supersqli
supersqli 一般sql语句的题都是先判断,经过测试,是单引号注入 999 union select database(),2#可以发现很多关键字都被过滤了select,所以联合查询,报错注入,布尔和时间盲注都不能用了,可以想到堆叠注入。…...
OceanBase 运维管理工具 OCP 4.x 升级:聚焦高可用、易用性及可观测性
可视化的管控平台,对 OceanBase 这类的分布式数据库及大规模数据的运维管理来说,是提升运维效率与数据库管理水平的重要工具。OceanBase 运维管理工具 OCP 作为专为OceanBase数据库设计的企业级全生命周期管理平台,为用户提供了全面的数据库可…...
HarmonyOS应用开发( Beta5.0)HOS-用户认证服务:面部识别
介绍 User Authentication Kit(用户认证服务)提供了基于用户在设备本地注册的人脸和指纹来认证用户身份的能力。 用户向应用/系统服务请求访问某些个人数据或执行某些敏感操作时,应用/系统服务将调用系统用户身份认证控件对用户身份进行认证…...
解决Docker镜像不可下载
使用国内可信的镜像中心 可信国内镜像网址:https://hub.atomgit.com/ 点击镜像仓库 搜索想要的镜像 按如图所示,即可查看对应的版本 点击复制,即可下载使用 缺点: 可用的镜像相比于docker官方量少 并且,获取的镜像名字…...
考研报名确认上传身份证户口本学历证明照片如何压缩裁剪
随着考研季节的到来,数以万计的考生开始准备报名所需的各种材料。在这一过程中,证件照片的上传无疑是一个关键环节。正确的照片格式和尺寸不仅能确保报名流程的顺利进行,还能避免因材料不合格而造成的不必要麻烦。本文将详细介绍如何在考研报…...
DolphinScheduler应用实战笔记
DolphinScheduler应用实战笔记 一、前言二、DS执行SQL或存储过程二、DS调用DataX同步数据三、DS调用HTTP接口四、DS依赖(DEPENDENT)节点五、DS SPARK 节点六、DS Flink 节点七、DS Flink 节点八、DS SQL 节点九、DS Java程序十、DS Python节点 一、前言 DolphinScheduler&…...
IThenticate查重为何成为英语期刊论文投稿首选工具
发表一篇英语论文,我发现很多人在准备向期刊投稿之前,都会选择使用IThenticate查重系统对论文进行相似性检测。是什么魔力,让这个查重工具让投稿者如此偏爱使用它查重呢? 一、什么是IThenticate查重系统? 在了解它被…...
C++ 在项目中使用Git
目录 一:配置邮箱和姓名 二:生成SSH Key 三:git 工作区和状态 四:git log 常用法 五:git diff 常用法 六:git 分支操作 七:git 回溯分支 八:git rebase -i 压缩历史提交…...
Python(TensorFlow和PyTorch)及C++注意力网络导图
🎯要点 谱图神经网络计算注意力分数对比图神经网络、卷积网络和图注意力网络药物靶标建模学习和预测相互作用腹侧和背侧皮质下结构手写字体字符序列文本识别组织病理学图像分析长短期记忆财务模式预测相关性生物医学图像特征学习和迭代纠正 Python注意力机制 对…...
选择firewalld还是iptables
firewalld与iptables介绍 firewalld和iptables都是Linux系统中用于管理防火墙规则的重要工具,但它们在功能、使用方式和适用场景上存在显著差异。 动态性: firewalld可以动态修改单条规则,并且能够动态管理规则集。这意味着在更新规则时不会…...
C到C++入门基础知识
一:命名空间:namespace (一):命名空间的定义 注:命名空间只能定义在全局,不能定义在函数内部。 (1)类似于C语言的结构体,C语言的命名空间定义为࿱…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
