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

java定时任务备份数据库

文章目录

  • 前言
  • 一、定时任务备份
  • 二、分享两个windows运行项目脚本
  • 总结


前言

数据库备份

程序中数据库备份可以有效避免因为意外,导致数据丢失,因此数据备份显得尤为重要。


一、定时任务备份

  • 定时任务类,要在配置类或启动类开启 @EnableScheduling

@Data
@Sl4j
@Service
public class SqlBackupTask {@Value("${app.sqldir}")private String sqlDir;@Value("${app.host}")private String host;@Value("${app.port}")private String port;@Value("${app.username}")private String username;@Value("${app.password}")private String password;@Value("${app.dbname}")private String dbname;/*** 执行数据库备份*/// 每日0点执行@Scheduled(cron = "0 0 0 * * ?")public void windowsDump() throws Exception {File file = new File(sqlDir);if (!file.exists()) {file.mkdir();}LocalDateTime now = LocalDateTime.now();String sqlname = now.format(DateTimeFormatter.ofPattern("yyyy_MM_dd"));String fileName = sqlDir + File.separator + sqlname + ".sql";File datafile = new File(fileName);if (datafile.exists()) {log.info("文件{}已存在,请更换", datafile.getName());return;}//拼接cmd命令  windows下 cmd   Linux下 /bin/shProcess exec = Runtime.getRuntime().exec("cmd /c mysqldump -h" + host + " -P" + port + " -u " + username + " -p" + password + " " + dbname + " > " + datafile);if (exec.waitFor() == 0) {log.info("数据库备份成功");delHistory(now);} else {log.error("数据库备份失败");}}/*** 删除当前时间五天前的备份*/// 每日1点执行@Scheduled(cron = "0 0 1 * * ?")private void delleteHistory(LocalDateTime now) {try {for (int i = 5; i < 10; i++) {String sqlname = now.plusDays(-i).format(DateTimeFormatter.ofPattern("yyyy_MM_dd"));String fileName = sqlDir + File.separator + sqlname + ".sql";File dataFile = new File(fileName);if (dataFile.exists()) {dataFile.delete();}}} catch (Exception e) {log.error("删除数据库备份文件失败", e);}}
}
  • yml 配置
app:sqldir: D:/dxb/sqlbackup/host: 10.0.15.36port: 3306username: rootpassword: rootdbname: dx_bao

二、分享两个windows运行项目脚本

  • start.bat

可以做到后台运行且不显示cmd窗口

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
start /b java -jar ruoyi-admin.jar --spring.config.location=./application.yml > nul 2>&1 &
  • stop.bat

主要是根据端口停止

@echo off
setlocal enabledelayedexpansion
for /f "eol=* tokens=*" %%i in ('netstat -an -o ^| findstr "8888"') do (
set a=%%i
set a=!a:~69,10!
echo !a!
taskkill /F /PID !a!
)
pause>nul

总结

这样就无须借助其他工具,只要程序运行,就能随时完整备份数据库了。

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

相关文章:

  • Vue.js 传递路由参数和查询参数
  • 2025数学建模美赛|F题成品论文
  • 私有包上传maven私有仓库nexus-2.9.2
  • 企业信息化4:免费开源的财务管理系统
  • PyCharm配置Python环境
  • 蓝桥杯3522 互质数的个数 | 数论
  • Effective C++ 规则49:了解 new-handler 的行为
  • 头像生成小程序搭建(免费分享)
  • 手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)
  • MySQL 基础学习(2): INSERT 操作
  • openstack 客户端命令行简介
  • Oracle查看数据库表空间使用情况
  • [护网杯 2018]easy_tornado1
  • 关于java实现word(docx、doc)转html的解决方案
  • 【8】思科IOS AP升级操作
  • 【ROS2】RViz2界面类 VisualizationFrame 详解
  • 2025年01月24日Github流行趋势
  • Gradle buildSrc模块详解:集中管理构建逻辑的利器
  • 【Airsim 仿真】查找配置文件 settings json 的路径优先级
  • 【FreeRTOS 教程 四】队列创建与发布项目到队列
  • STM32项目分享:智能厨房安全检测系统
  • 2025美赛数学建模MCM/ICM选题建议与分析,思路+模型+代码
  • 高并发问题的多维度解决之道
  • Ubuntu环境 nginx 源码 编译安装
  • K8S中的数据存储之基本存储
  • 编码器和扩散模型
  • PAT甲级-1024 Palindromic Number
  • FS8405 Release FS0B
  • IGBT的损耗计算的学习【2025/1/24】
  • Unity|小游戏复刻|见缝插针1(C#)